Jeg havde også et projekt, hvor en Oracle DB leverer dataene til mine @Entity klasser. Som du sagde, genererer en sekvens id'et for tabellens PK via en trigger. Dette var annotationerne, som jeg brugte i en af disse klasser:
@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;
}
Dette er den anden syntaks, som du har vist i dit indlæg. Der er intet kald til triggeren i Java-koden, fordi triggeren administreres af DB. Jeg kan huske, at jeg skulle have sekvensen og triggeren på samme tid i DB'en, hvis jeg ikke ville have problemer. Triggeren spurgte, om id'et for rækken, der skal indsættes, er nul eller =0. I dette tilfælde kaldes sekvensen LOG_SEQ.
Så hvis du angiver en værdi til @Id'et for din enhed, kan den indsættes i DB'en (hvis dette Id ikke findes), og sekvensen ville ikke blive kaldt. Prøv at se udløserens kode for at se præcis, hvad det sker.