Hibernate JPA での非 ID 列のデータベース シーケンスの使用
JPA プロバイダーとして Hibernate を使用する場合、必要な場合があります。識別子の一部ではない列の値を生成します。残念ながら、主キーの自動インクリメントに一般的に使用される @GeneratedValue アノテーションは、このシナリオには適用できません。
まず、Hibernate/JPA は非 ID プロパティの値を自動的に生成しないことを理解することが重要です。 @GeneratedValue アノテーションは、主キーの生成を管理するためにのみ使用されます。代わりに、データベースで生成された値が期待されます。
この制限を克服するには、「サロゲート キー エンティティ」と呼ばれる、生成された識別子を持つ別のエンティティを作成することを検討してください。次に、問題の非 ID 列を、OneToOne 関係を使用してこのサロゲート エンティティに関連付けることができます。
実装例:
// Surrogate Key Entity @Entity public class SurrogateEntity { @Id @GeneratedValue(...) private Long number; } // Main Entity @Entity public class MyEntity { @Id private Long id; @OneToOne(...) private SurrogateEntity myVal; }
このアプローチでは、値myVal プロパティは、新しい MyEntity インスタンスの作成時にデータベースによって生成されます。この回避策により、Hibernate のデータベース生成値処理機能を非 ID 列に対して利用できるようになります。
以上がHibernate JPA で非 ID 列のデータベース シーケンスを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。