Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Ruhezustand, ID, Orakel, Sequenz

Ich hatte auch ein Projekt, in dem eine Oracle-Datenbank die Daten für meine @Entity-Klassen bereitstellt. Wie Sie sagten, generiert eine Sequenz die ID für den PK der Tabelle über einen Trigger. Dies waren die Anmerkungen, die ich in einer dieser Klassen verwendet habe:

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

Dies ist die zweite Syntax, die Sie in Ihrem Beitrag gezeigt haben. Es gibt keinen Aufruf des Triggers im Java-Code, da der Trigger von der DB verwaltet wird. Ich erinnere mich, dass ich die Sequenz und den Trigger gleichzeitig in der DB haben musste, wenn ich keine Probleme haben wollte. Der Trigger hat gefragt, ob die ID der einzufügenden Zeile null oder =0 ist. In diesem Fall wird die Sequenz LOG_SEQ aufgerufen.

Wenn Sie also der @Id Ihrer Entität einen Wert zuweisen, könnte dieser in die DB eingefügt werden (wenn diese ID nicht existiert) und die Sequenz würde nicht aufgerufen. Versuchen Sie, den Code des Triggers zu sehen, um genau zu sehen, was passiert.