Oracle スキーマに永続化されたエンティティがあります。DB 挿入時に、トリガーは DB シーケンスを使用してエンティティ ID を生成します。レガシー コンポーネントにとって重要な ID 生成シーケンス (ログ テーブルの種類) の横にある別のテーブルも更新されるため、トリガーの使用は必須です。
エンティティ マッピングで Hibernate id ジェネレーターを構成するにはどうすればよいですか?
同様の Stackoverflow の質問を調べてみると、私の場合には当てはまらない解決策がいくつか見つかりました。
- シーケンスを直接使用する:
<generator class="sequence">...</generator>
. 残りのトリガー コードが実行されないため、これは不可能です。 - これ
<generator class="select">...</generator>
は、挿入後に Hibernate が別の固有のプロパティを使用してエンティティを選択することを意味します (Hibernate-3.3 マニュアル 5.1.4.6. に従って)。他に一意の列がなく、一連のプロパティの使用がサポートされていないため、これもここでは不可能です。 <generator class="assigned">...</generator>
を呼び出す前に偽の IDを使用および設定するsave()
。この ID は DB トリガーによって無視され、結果の DB 行には正しい ID が含まれます。ただし、私の Java インスタンスにはそれがなく、このソリューションはトリガーの実装を前提としているため、魅力的ではありません。
この問題の良い解決策はありますか?