【发布时间】:2012-11-13 13:21:23
【问题描述】:
我正在创建一个基于远程数据库模式的域模型,该模式仅提供一个视图供我使用。该视图是许多不同表的完全连接,这意味着存在大量重复数据。
视图看起来有点像这样(它实际上要大得多,但想法是一样的):
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 和CLASS_ID 用作@Ids 吗?它们在视图中并不是唯一的,但是像 SELECT DISTINCT STUDENT_ID, STUDENT_NAME FROM THE_VIEW 这样的操作会让它们变得独一无二……JPA 如何处理这些事情?
对所有 ID 使用复合主键当然是可能的,但它必须包含许多字段,我真的想避免这种情况。
关于解决此问题的任何其他建议?我们现在可以忽略与其他实体类型的关系。
JPA实现是eclipselink 2.2.0,数据库是Oracle 11g
【问题讨论】:
标签: java jpa orm oracle11g eclipselink