非 ID 列の Hibernate シーケンス
データベース シーケンスを使用して Hibernate で非主キー列の値を生成することは、一般的な要件です。残念ながら、hibernate には現在、これを実現するための組み込みメソッドが提供されていません。
@GeneratedValue アノテーションは、主キーの値を自動生成するために @Id と組み合わせてのみ使用できます。この問題は、Hibernate が非 ID プロパティはユーザー アプリケーションによって処理されるべきであると想定しているために発生します。
この制限を克服するには、自動生成された ID を持つ別のエンティティを作成する回避策が必要です。このエンティティは、ターゲット エンティティの非 ID プロパティに割り当てることができるシーケンス値を生成する役割を果たします。
次の例を考えてみましょう。
@Entity public class GeneralSequenceNumber { @Id @GeneratedValue(...) private Long number; } @Entity public class MyEntity { @Id private Long id; @OneToOne(...) private GeneralSequenceNumber myVal; }
このシナリオでは、 GeneralSequenceNumber の新しいインスタンスが作成され、その数値フィールドが自動生成されます。この値は、エンティティの永続化中に MyEntity の myVal プロパティに割り当てられます。
この回避策では追加のエンティティが追加されますが、Hibernate で非 ID プロパティ シーケンスを管理するためのソリューションが提供されます。よりシームレスなアプローチが実装されるまで、この方法はこの一般的な使用例に対する実用的な解決策を提供します。
以上がHibernate で非 ID 列のデータベース シーケンス値を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。