NamingStrategy
は、Hibernate 4.2/4.3( HHH-7079 )ですでに非推奨としてマークされていました。 Hibernate 5以降、2つの置換(?)インターフェイスImplictNamingStrategy
およびPhysicalNamingStrategy
( HHH-7078 )が付属し、最終的に古いNamingStrategy
のサポートが終了しました。そのため、サポートされるSpringの今後のHibernate5では、コンフィギュレーターnamingStrategy()
が削除され、implicitNamingStrategy()
とphysicalNamingStrategy()
が優先されます。ここまでは順調ですね。
一部のドキュメント(つまり、不完全な working-5.0-migration-guide.md )および次のHibernate 5の(生成された)リリースノート(本日現在)に記載されていますが、私はこれらを実際に使用する具体的な例howは見つかりませんでした。
おそらく私は何かを見逃しましたが、JavaDocも問題も、両方の戦略タイプのアイデアの証拠を示していません。さらに、私はすでにNamingStrategy
に基づく1つの戦略を持っています: よく知られているもの に基づくカスタムOracleNamingStrategy
。
私は(明らかに)コードの適切な解決策に興味がありますが、実際の問題は、機能する移行ドキュメントや再構築された命名戦略の概念的なアイデアを取得することです。
また関連:
Hibernate構成ファイルに以下のキーと値のペアを配置します
hibernate.implicit_naming_strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
hibernate.physical_naming_strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
エンティティクラスで@Tableおよび@Columnアノテーションをアンダースコア付きの名前で指定する場合、つまりser_id ie @Column(name = "ser_id")列名はser_id;ユーザーIDとして指定した場合、ストラテジーまたは暗黙のストラテジー(具体的にはspring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
)を使用しないと、user_idに変更されます。したがって、エンティティ属性名がアンダースコアと小文字の名前に変更される戦略、つまりserIdからser_idのような戦略が必要な場合は、暗黙的または戦略なしを使用する必要があります(実際には暗黙の戦略を使用します)。
命名戦略で列名またはクラス名にアンダースコアを追加したくない場合、使用する必要のある戦略は次のようになります。spring.jpa.hibernate.naming.physical-strategy= org.hibernate.boot .model.naming.PhysicalNamingStrategyStandardImpl。アノテーション@Table
および@Column’s
name属性で指定したものはそのままになります。
アノテーションを提供せず、テーブル名と列名を手動で処理する場合は、クラスorg.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
を拡張し、必要なメソッドをオーバーライドする必要があります。ここでいくつかのケースで引き続きアノテーションを使用する場合は、オーバーライドされたメソッドがそれらのアノテーションに記述された名前に適用されることに注意してください。
spring.jpa.hibernate.naming.physical-strategy = example.CustomStrategy