sql >> Base de Datos >  >> RDS >> Oracle

Hibernate, id, oráculo, secuencia

También tuve un proyecto en el que una base de datos Oracle proporciona los datos a mis clases de @Entity. Como dijiste, una secuencia genera la identificación para el PK de la tabla a través de un disparador. Estas fueron las anotaciones que usé en una de estas clases:

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "G1")
@SequenceGenerator(name = "G1", sequenceName = "LOG_SEQ")
@Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
public int getId() {
    return this.id;
}

Esta es la segunda sintaxis que ha mostrado en su publicación. No hay una llamada al disparador en el código Java porque el disparador es administrado por la base de datos. Recuerdo que tenía que tener la secuencia y el disparador al mismo tiempo en la BD si no quería tener problemas. El disparador preguntó si el id de la fila a insertar es nulo o =0. En este caso, se llama a la secuencia LOG_SEQ.

Entonces, si proporciona un valor al @Id de su entidad, podría insertarse en la base de datos (si ese Id no existe) y no se llamaría a la secuencia. Intente ver el código del disparador para ver exactamente lo que sucede.