Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment donner la valeur générée par le déclencheur dans Hibernate ValueObject ?

Si vous utilisez un déclencheur, la stratégie de génération prévue est org.hibernate.id.SelectGenerator . Cependant, afin d'utiliser cette stratégie, Hibernate doit être capable de localiser la ligne insérée après l'insertion pour voir quelle valeur le déclencheur a assignée, il y a 2 façons de le faire.

La première consiste à configurer spécifiquement le générateur pour lui indiquer une colonne qui définit une clé unique (au moins logiquement) dans la table :

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

L'autre est via le support natural-id d'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 peut fonctionner pour vous. Cela dépendra vraiment du pilote JDBC et de la façon dont (si) il implémente getGeneratedKeys