Mysql
 sql >> Database >  >> RDS >> Mysql

Come fornire il valore generato da Trigger in Hibernate ValueObject?

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