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