ドメイン モデルを簡素化するために、有効な記録日パターンを使用しようとしています。
Person to Address は OneToMany ですが、特定の日付の時点では OneToOne です。
Person と Address の両方に開始日と終了日があり、時間の経過に伴う変化が考慮されます。また、Address は自宅と職場の 2 つの役割で使用できます。
JPA 2.0 と Hibernate 4.2 拡張機能を使用しています。
したがって、ドメイン オブジェクトは次のようになります。
人物クラス
public class Person {
@Transient
Date effectiveDate; // used to filter Person and Address record by effective date
long id;
Date start;
Date end;
String firstName;
String lastName;
Address home; // not Collection<Address> homeAddresses;
Address work; // not Collection<Address> workAddresses;
}
および Address クラス
public class Address {
long id;
Date start;
Date end;
String street;
String city;
String state;
}
質問:
1. テーブルが OneToMany アソシエーションにある場合でも、Person to Address アソシエーションに @OneToOne を使用できますか?
2. JPA アノテーションを使用してこれを行う最善の方法は? Hibernate は @Filter を提供しますが、それでも OneToMany 関連付けを想定していませんか?