Oracle
 sql >> Database >  >> RDS >> Oracle

Ibernazione, id, oracolo, sequenza

Avevo anche un progetto in cui un DB Oracle che fornisce i dati alle mie classi @Entity. Come hai detto, una sequenza genera l'id per il PK della tabella tramite un trigger. Queste erano le annotazioni che ho usato in una di queste classi:

@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;
}

Questa è la seconda sintassi che hai mostrato nel tuo post. Non c'è alcuna chiamata al trigger nel codice Java perché il trigger è gestito dal DB. Ricordo che dovevo avere la sequenza e il trigger contemporaneamente nel DB se non volevo avere problemi. Il trigger chiede se l'id della riga da inserire è null o =0. In questo caso viene chiamata la sequenza LOG_SEQ.

Quindi se fornisci un valore al @Id della tua entità potrebbe essere inserito nel DB (se quell'ID non esiste) e la sequenza non verrebbe chiamata. Prova a vedere il codice del trigger per vedere esattamente cosa succede.