トリガーを使用している場合、意図された生成戦略はorg.hibernate.id.SelectGenerator
です。 。ただし、この戦略を使用するには、Hibernateは挿入後に挿入された行を見つけて、トリガーに割り当てられた値を確認できる必要があります。これを行うには2つの方法があります。
1つは、テーブル内で(少なくとも論理的に)一意のキーを定義する列をジェネレーターに通知するようにジェネレーターを具体的に構成することです。
@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;
もう1つは、Hibernateのnatural-idサポートを介したものです:
@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が機能する場合があります。それは実際にはJDBCドライバーと、それがgetGeneratedKeys
をどのように実装するか(もし)に帰着します。