Měl jsem také projekt, kde byla Oracle DB, která poskytuje data mým @Entity třídám. Jak jste řekl, sekvence generuje id pro PK tabulky prostřednictvím spouštěče. Toto byly anotace, které jsem použil v jedné z těchto tříd:
@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;
}
Toto je druhá syntaxe, kterou jste ukázali ve svém příspěvku. V kódu Java není žádné volání spouštěče, protože spouštěč je spravován DB. Pamatuji si, že jsem v DB musel mít sekvenci i trigger zároveň, pokud jsem nechtěl mít problémy. Spouštěč se zeptal, zda je id řádku, který se má vložit, null nebo =0. V tomto případě je volána sekvence LOG_SEQ.
Pokud tedy zadáte hodnotu do @Id vaší entity, mohla by být vložena do DB (pokud toto ID neexistuje) a sekvence by nebyla volána. Zkuste se podívat na kód spouštěče, abyste přesně viděli, co se stane.