リモート データベース スキーマに基づいてドメイン モデルを作成していますが、これは作業対象の 1 つのビューのみを提供します。ビューは多くの異なるテーブルの完全結合です。つまり、多くの重複データがあります。
ビューは次のようになります (実際にはもっと大きくなっていますが、考え方は同じです)。
STUDENT_ID STUDENT_NAME CLASS_ID CLASS_NAME YEAR_ID YEAR
----------------------------------------------------------------------------
1 Jane 1 Maths 1 2001
1 Jane 2 Biology 1 2001
2 Adam 2 Biology 1 2001
2 Adam 2 Biology 2 2002
NULL NULL 1 Maths 2 2002
3 Pete NULL NULL NULL NULL
NULL NULL 3 Physics NULL NULL
NULL NULL NULL NULL 3 2003
ご覧のとおり、これはテーブル と の完全なSTUDENT
結合CLASS
ですYEAR
。
一部の学生は、
3 つのエンティティ クラスを作成したい: Student
、Class
およびYear
; それぞれが ID と名前を保持しています。
@Entity
@Table(name = "THE_VIEW")
public class Student implements Serializable {
@Id
@Column(name = "STUDENT_ID")
private long id;
@Column(name = "STUDENT_NAME")
private String name;
/* Getters, setters and references to other entities */
}
@Entity
@Table(name = "THE_VIEW")
public class Clazz implements Serializable {
@Id
@Column(name = "CLASS_ID")
private long id;
@Column(name = "CLASS_NAME")
private String name;
/* Getters, setters and references to other entities */
}
STUDENT_ID
andCLASS_ID
を@Id
sとして使用できますか? それらはビューでは一意ではありませんが、次のようなSELECT DISTINCT STUDENT_ID, STUDENT_NAME FROM THE_VIEW
ことを行うと一意になります... JPAはこれらをどのように処理しますか?
すべての ID:s に複合主キーを使用することはもちろん可能ですが、多くのフィールドを含める必要があり、それを避けたいと思っています。
これを解決するための他の提案はありますか? 現時点では、他のエンティティ タイプとの関係は無視できます。
JPA 実装は eclipselink 2.2.0 で、データベースは Oracle 11g です。