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