0

@inheritanceタイプで参加しました

クラスの人、従業員、学生がいます

Personに共通の列があり、personクラスからアクセスする必要がある場合はdiscriminator列のゲッターセッターがあります

@Inheritance(strategy = InheritanceType.JOINED)@DiscriminatorColumn(name = "PERSON_TYPE"、discriminatorType = DiscriminatorType.STRING)パブリッククラスPerson

@Column(name = "RELATIONSHIP_TYPE"、insertable = false、nullable = false、updatable = false)プライベート文字列relationType;

//ゲッターとセッター

@DiscriminatorValue( "STUDENT")@PrimaryKeyJoinColumn(name = "PERSON_ID")パブリッククラスStudent

@DiscriminatorValue( "EMPLOYEE")@PrimaryKeyJoinColumn(name = "PERSON_ID")public class Employee

したがって、EmployeeまたはStudentレコードを保存してから、Personレコードを取得すると、識別子の列の値がNULLとして返されますが、サーバーを再起動すると、それに応じて値が返されます。

弁別子列の値を手動で設定してから保存して取得すると、値が表示されます(弁別子列の値を手動で設定する必要がありますか?)、弁別子列を使用する利点は何ですか?

なぜ私は列タイプを持つ従業員と学生との人のOneToMany関係を使用しないのですか?列挙型を介して列にパースペクティブ値を入力でき、その列にも遅延フェッチを適用します

提案してください

事前に感謝ラマンディープシン

4

1 に答える 1

0

私は同じユースケースを持っていますが、少し異なっていました。列挙型の PersonType と、すべての拡張クラスでオーバーライドされる抽象プロパティがあります。Hibernate はディスクリミネーターを使用して作成するクラスを決定し、クラスはマッピングとプロパティの両方としてディスクリミネーター値を決定します。

pubilc abstract PersonType getType();
于 2012-08-23T10:19:23.827 に答える