1

Hibernate SequenceGenerator のカスタマイズについての質問です。

Oracle と SQLServer の 2 つのレガシー データベースで動作するアプリケーション (Spring 3.1/Hibernate 4) があります。Id ジェネレーターで問題が発生しました。

私のエンティティでは、ID ジェネレーター戦略に AUTO の注釈を付けて、Oracle で動作する場合はデフォルトで SequenceGenerator を選択し、SQLServer で動作する場合はデフォルトで IdentityGenerator を選択するようにしました。問題なく SQLServer で動作します。しかし、Oracle の場合、hibernate はハードコードされた「hibernate_sequence」をデフォルトのシーケンス名として使用します。これは、従来の Oracle データベースがテーブルごとのシーケンス名として規則 TableName+"_SEQ" を使用するため、問題を引き起こしました。

Hibernate SequenceGenerator のソース コードを変更し、独自の休止状態のコード ベースを構築することで、問題を解決することができました。しかし、Hibernate のアップグレード中にこれを覚えておく必要があるため、これはあまり好ましくありません。

また、SequenceGenerator/IDGenerator を切り替える独自の ID ジェネレーターを作成しようとしましたが (ID フィールドに注釈を付けました)、失敗しました。いずれにせよ、これは私がためらっている JPA/Hibernate フレームワークの内部にさらに飛び込む必要があるため、好ましい方法ではありません。

私が望むのは、CustomizedSequenceGenerator を作成し、Hibernate が構成によって使用しているものを何らかの方法でオーバーライドすることです。でも、「なんとなく」を見つけることができました。

誰もそのような経験をしていますか?

ありがとう、サイモン

4

1 に答える 1

0

インターフェイスを実装し、そのメソッドIdentifierGeneratorをオーバーライドすることで、カスタム ジェネレーターを作成できますgenerate

次に、エンティティでそれを使用して ID を生成できます。

@Id
@GenericGenerator(name="TABLE_X_SEQ", strategy="com.package.TableXIdGenerator")
@GeneratedValue(generator="TABLE_X_SEQ")
于 2013-04-03T07:39:31.617 に答える