私は、複数のデータベースエンジン(Oracle、MSSQL、MySQL)をサポートする製品を開発中です。 Oracleの場合、SequenceテーブルではなくSequencesテーブルを使用して、大容量インストールで潜在的な並行性とロックの問題を回避することを望みますが、他のデータベースエンジンはシーケンスをサポートしていません。さらに、グローバルシーケンス(hibernate_sequence
など)ではなく、テーブルごとに1つのシーケンスを使用することをお勧めします。したがって、@GeneratedValue(strategy = GenerationType.AUTO)
は機能しません。実行時に戦略を動的に選択する方法はありますか?JPAアノテーションとHibernateを使用して@GeneratedValue戦略を動的に選択する方法はありますか?
答えて
実際には、HibernateはGenerationType.AUTO
とGenerationType.SEQUENCE
の両方をorg.hibernate.id.enhanced.SequenceStyleGenerator
で解釈します。 SequenceStyleGeneratorは、基礎となるデータベースがサポートするものに基づいて2つの戦略のうちの1つを選択するID生成戦略です。データベースがシーケンスをサポートする場合、SequenceStyleGeneratorはシーケンスを使用します。そうでない場合、SequenceStyleGeneratorは「シーケンステーブル」を使用することに戻ります。使用するジェネレータのこの「マッピング」は、設定値:hibernate.id.new_generator_mappings
によって制御されます。これをtrueに設定すると、上記の動作が有効になります。残念ながら、下位互換性の理由から、デフォルトにfalseを設定する必要がありました。だから、それを利用するには、設定がtrueに設定されていることを確認する必要があります。
さらに、名前が指定されていない場合は、エンティティごとにグローバルシーケンスまたはシーケンスを優先するようにSequenceStyleGeneratorを構成できます。これは、prefer_sequence_per_entity
という名前の設定によって制御されます。
SequenceStyleGeneratorは一般的にはかなり構成可能です。詳細については、そのjavadocsを見てください:http://docs.jboss.org/hibernate/orm/4.1/javadocs/index.html?org/hibernate/id/enhanced/SequenceStyleGenerator.html
- 1. HSQLDBとHibernateでテーブルを動的に選択する方法は?
- 2. Lazy Fetch戦略対Eager Hibernateで戦略をフェッチしますか?
- 3. `` Concat '戦略を使用するために `Source.combine`を明示的にマークする方法はありますか?
- 4. JPA @Id @GeneratedValueアノテーションとDBの主キー?
- 5. PostgresのUUID生成とHibernateのIDENTITY ID生成戦略を併用する方法はありますか?
- 6. にHibernate JPAアノテーション
- 7. Javaアノテーションを使用して '戦略パターン'を実装できますか?
- 8. Springを使ってHibernate Beanの命名戦略を定義する方法は?
- 9. ストアドプロシージャ内でデータベースを動的に選択する方法はありますか?
- 10. null値の列を動的に選択する方法はありますか?
- 11. 問題JPAアノテーションを使用して、hibernateを使ってマップをマップする
- 12. Hibernate 5:@Columnの命名戦略を無視する方法は?
- 13. 選択例外戦略内の例外戦略をキャッチ
- 14. JPA - Hibernate:連続的に成長するテーブルのクエリを選択
- 15. JPAとHibernateを使用してJSON文字列を自動的にシリアライズおよび逆シリアル化する方法はありますか?
- 16. JPAとHibernateで@Idアノテーション
- 17. Python Finance:シグナル戦略にmacdインジケータを使用する方法は?
- 18. JPA @GeneratedValueと@Id
- 19. codeigniterを使用したスケーラブルなマルチサイト戦略はありますか?
- 20. jpaのエンティティクラスを自動的に更新する方法はありますか?
- 21. JPAを使用してタプルを選択するうまい方法
- 22. ワークボックスを使用して 'キャッシュとネットワーク'戦略を実装する方法
- 23. モバイルアプリケーションの機能を選択的に有効にするための戦略
- 24. 結び固め戦略を使ってグラフを表現する便利な方法はありますか?
- 25. hibernate/JPAのカスタム選択
- 26. hibernateを使用してバッチでデータを選択する方法は?
- 27. JAXBアノテーションを使用しているときにJSONのルートをアンラッピングする方法はありますか?
- 28. jpaとhibernateを使用してネイティブクエリをPOJOクラスにマップする方法
- 29. JDOアノテーションとJPAアノテーションの両方を同時に使用することはできますか?
- 30. JPaとHibernateを使用することはできますか?
どのように構成可能です、私はまだSequenceStyleGeneratorのincrement_sizeを変更する方法の一例を見つけるのですか? configureメソッドに渡されるparamsは、cfg.xmlで設定されたプロパティのセットが限定されています。オプティマイザとincrement_sizeは私の努力の最善を尽くすために渡されません。 –
'@SequenceGenerator(...、allocationSize = blah)' –
提案していただきありがとうございます。しかし、SequenceGeneratorはSequenceStyleGeneratorで述べられているのと同じプロパティを持っていないので、これはショートカットのようです。 私はこれを試してプールド・オプティマイザと連携し、私が期待していたパフォーマンス・エッジを私に与えました。 しかし、閉鎖のため。 cfg.xmlファイルでこれを行う方法はありますか? SequenceStyleGenerator.javaの "optimizer"と "increment_size"は、デバッグ中にhibernateによって読み込まれませんでした。 http://stackoverflow.com/questions/19694154/hibernate-cfg-xml-configuration-for-sequence-generator –