2012-02-22 7 views
1

Oracleデータベースを持つアプリケーションがあります。各データベースには、その行の次のIDを取得するためのシーケンスを呼び出すトリガーがあります。 Hibernateが挿入物の次のIDを指定せず、Oracleとトリガーだけがそれを処理できるようにドメインを設定するにはどうすればよいですか?OracleはHibernateの代わりにIDのシーケンスをトリガーさせますか?

以前私はドメインジェネレータを使用してシーケンスジェネレータを使用していましたが、これはうまく動作していました。私はDBAがGrailsのシーケンスに選択された権限を与えることができないので、私たちのプロダクションシステムでこれを使うことはできません。これは明らかにHibernate用のジェネレータを破壊します。 シーケンスのサポートデータベースとオートナンバーサポートデータベース使用している場合

答えて

5

idを取得するために、JDBC挿入からgeneratedKeysを使用してカスタム・ジェネレータを説明し、このHibernateのフォーラムのトピックは、あります:https://forum.hibernate.org/viewtopic.php?t=973262

そのカスタム・ジェネレータは、あなたのために働く場合は、あなたができるように使用する必要があり、それは経由:

static mapping = { 
    id generator:"jpl.hibernate.util.TriggerAssignedIdentityGenerator" 
} 
+0

これはトリックを行うように、感謝します。 – thomj

0

あなたは、次のシナリオがあることはできません。

  1. をシーケンスのサポート

    1. Hibernateはシーケンスの次の値を取得し
    2. Hibernateはフェッチされた値をエンティティのIDとして設定します
    3. Hibernateは、それのIDは、HibernateはJDBCドライバから割り当てられたIDをフェッチ
    4. ID値なしHibernateは、エンティティを永続化クエリで
  2. 自動番号支持

    1. を設定された状態で、エンティティを永続実際にOracleのドライバの問題として

ので、ステップ2.2をサポートしていません。 Hibernateは最後に割り当てられたIDを取得することはできません(エンティティのIDに設定することができます)。

+0

私はHi-Loキージェネレータを使用するほうがはるかに優れていることを言及します。 –

関連する問題