Se stai utilizzando un trigger, la strategia di generazione prevista è org.hibernate.id.SelectGenerator
. Tuttavia, per utilizzare questa strategia, Hibernate deve essere in grado di individuare la riga inserita dopo l'inserimento per vedere quale valore è stato assegnato dal trigger ci sono 2 modi per farlo.
Il primo è configurare specificamente il generatore per dirgli una colonna che definisce una chiave univoca (almeno logicamente) all'interno della tabella:
@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'altro è tramite il supporto natural-id di 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 potrebbe funzionare per te. Dipenderà davvero dal driver JDBC e da come (se) implementa getGeneratedKeys