sql >> Databáze >  >> RDS >> Oracle

Hibernate, id, oracle, sekvence

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.




  1. Proč dostanu PLS-00302:komponenta musí být deklarována, když existuje?

  2. Porovnání MySQL s hodnotou null

  3. Jak importovat / obnovit tabulky MySql pomocí PHP

  4. Jak mohu použít alias v klauzuli where?