我正在制作一个基于远程数据库模式的域模型,它只为我提供一个单一的视图来处理。该视图是许多不同表的完全连接,这意味着存在大量重复数据。
视图看起来有点像这样(它实际上要大得多,但想法是一样的):
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
and CLASS_ID
as @Id
s 吗?它们在视图中并不是唯一的,但是做一些类似的SELECT DISTINCT STUDENT_ID, STUDENT_NAME FROM THE_VIEW
事情会使它们变得独一无二...... JPA 如何处理这些事情?
为所有 ID:s 使用复合主键当然是可能的,但它必须包含许多字段,我真的想避免这种情况。
有关解决此问题的任何其他建议?我们现在可以忽略与其他实体类型的关系。
JPA 实现是 eclipselink 2.2.0,数据库是 Oracle 11g