Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como dar valor gerado pelo Trigger no Hibernate ValueObject?


Se você estiver usando um gatilho, a estratégia de geração pretendida é org.hibernate.id.SelectGenerator . No entanto, para usar esta estratégia, o Hibernate deve ser capaz de localizar a linha inserida após a inserção para ver qual valor o trigger atribuiu, existem 2 maneiras de fazer isso.

A primeira é configurar especificamente o gerador para informar uma coluna que define uma chave exclusiva (pelo menos logicamente) dentro da tabela:
@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;

A outra é através do suporte natural-id do 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 pode funcionar para você. Ele realmente se resume ao driver JDBC e como (se) ele implementa getGeneratedKeys