私は以下の方法を使用して、オブジェクトのコレクションをデータベースに保存しています。HibernateテンプレートSaveOrUpdateALL主キー自動生成
public Collection save(Collection instances) {
try {
this.getHibernateTemplate().saveOrUpdateAll(instances);
this.getHibernateTemplate().flush();
} catch (RuntimeException re) {
throw re;
}
return instances;
}
インスタンスの主キーは、HibernateTemplateによって自動的に生成されます。 JVMの起動後、このメソッドが初めて呼び出されると、Hibernateは以下のクエリを実行してインスタンスで使用されるMax主キーを取得します。
選択最大(主キーID)TABLE_NAME
しかし、メソッドが実行される2回目以降、私はこのクエリが実行されて表示されません。 hibernateがこの値をセッションのどこかに格納するように見えます。
これで、テーブルが別のプロセス(ストアド・プロシージャまたはSQLと言います)で更新されると、上記のメソッドへの呼び出しはすべて失敗し、ORA-00001:一意制約(SCHEMANAME.PRIMARY_KEY_CONSTRAINT)違反例外が発生します。 JVMが再起動されると、Hibernateはmax(Primary Key)生成クエリを再度実行し、すべてが機能します。
プライマリキーの自動生成クエリが、メソッドが実行されるたびに(初めてではなく)実行されていることを確認するために、必要なものを手伝ってもらえますか?ありがとう。
このプロパティはどこに設定されていますか?これはHibernate設定プロパティ内にありますか?ご協力いただきありがとうございます。私は広範囲にHibernateを使用していませんが、あなたが提供したリンクは参考になります。 – Ravi
私は、Hibernateテーブルマッピング設定ファイルでid-generatorを見つけました。しかし、インクリメント以外のものに変更すると、IDジェネレータをインスタンス化できないというHibernate Mapping例外がスローされます。 –
Ravi