Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann man Hibernate ValueObject einen vom Trigger generierten Wert geben?

Wenn Sie einen Trigger verwenden, ist die beabsichtigte Generierungsstrategie org.hibernate.id.SelectGenerator . Um diese Strategie zu verwenden, muss Hibernate jedoch in der Lage sein, die eingefügte Zeile nach dem Einfügen zu finden, um zu sehen, welchen Wert der Trigger zugewiesen hat. Dazu gibt es zwei Möglichkeiten.

Zuerst muss der Generator speziell konfiguriert werden, um ihm eine Spalte mitzuteilen, die einen eindeutigen Schlüssel (zumindest logisch) innerhalb der Tabelle definiert:

@Id
@Column(name="S_ID")
@GeneratedValue( strategy = "trigger" )
@GenericGenerator( 
    name="trigger", strategy="org.hibernate.id.SelectGenerator",
    parameters = {
        @Parameter( name="keys", value="userName" )
    }
)
private String s_id;

private String userName;

Die andere erfolgt über die natürliche ID-Unterstützung von Hibernate:

@Id
@Column(name="S_ID")
@GeneratedValue( strategy = "trigger" )
@GenericGenerator( name="trigger", strategy="org.hibernate.id.SelectGenerator" ) )
private String s_id;

@NaturalId
private String userName;

GenerationType.IDENTITY könnte für Sie funktionieren. Es kommt wirklich auf den JDBC-Treiber an und wie (falls) er getGeneratedKeys implementiert