Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Hibernacja, id, wyrocznia, sekwencja

Miałem również projekt, w którym Oracle DB dostarcza dane do moich klas @Entity. Jak powiedziałeś, sekwencja generuje identyfikator PK tabeli za pomocą wyzwalacza. To były adnotacje, których użyłem w jednej z tych klas:

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

Jest to druga składnia, którą pokazałeś w swoim poście. W kodzie Java nie ma wywołania wyzwalacza, ponieważ wyzwalacz jest zarządzany przez bazę danych. Pamiętam, że musiałem mieć jednocześnie sekwencję i spust w DB, jeśli nie chciałem mieć problemów. Wyzwalacz zapytał, czy id wiersza do wstawienia jest null lub =0. W tym przypadku wywoływana jest sekwencja LOG_SEQ.

Więc jeśli podasz wartość do @Id swojej encji, może ona zostać wstawiona do DB (jeśli ten identyfikator nie istnieje), a sekwencja nie zostanie wywołana. Spróbuj zobaczyć kod wyzwalacza, aby zobaczyć dokładnie, co się dzieje.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle - Dlaczego powinienem używać pakietów zamiast samodzielnych procedur lub funkcji?

  2. Różnica dat Oracle, aby uzyskać liczbę lat

  3. Migracja bazy danych Oracle z AWS EC2 do AWS RDS, część 2

  4. Oracle wstawia z zaznaczenia do tabeli z większą liczbą kolumn

  5. Zmień tabelę, aby zmienić domyślną wartość kolumny