sql >> Database teknologi >  >> RDS >> Oracle

Dvale, id, orakel, sekvens

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.




  1. Kan PostgreSQL have en unikhedsbegrænsning på array-elementer?

  2. SQL Server Full Text Search Escape Characters?

  3. Stop venligst med at bruge dette UPSERT-anti-mønster

  4. To PLSQL-sætninger med start og slut, kører fint hver for sig, men ikke sammen?