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.