我有以下表格:
master_table(id, col1, col2, discriminator_col)
join_table1(m_id, v_id)
value_table1(id, val)
join_table2(m_id, v_id)
value_table2(id, val)
有单个主表和多个值表通过连接表连接到主表。值表包含每个master_table行的单个标量值。来自单独值表的值放在后代实体中,因此有一个MasterEntity和几个Child1Entity,Child2Entity等。
我不想为每个value_table创建一个单独的实体,只为每个ChildEntity创建一个单独的实体,并以某种方式将值表连接到该实体。
MasterEntity:
@Entity
@Inheritance(...) // not sure what type of inheritance to use
public class MasterEntity {
@Id
private int id;
private String col1;
private String col2;
}
Child1Entity:
@Entity
public class Child1Entity extends MasterEntity {
// need to get value_table1.val column here
}
我可以为value_table创建实体并为Child1Entity
添加多对一关系,但如果可以避免我想这样做。
我尝试将两个辅助表(join_table1,value_table1)添加到Child1Entity
,但我无法将join_table1
加入value_table1
,只加入master_table
。
答案 0 :(得分:1)
如果您想使用@Inheritance
,则不能拥有join_tables
。使用这些连接表,您的模型说:
一个值可以属于多个主行
一个主行可以属于多个值行
如果你只是想:1个主人属于1个值行,而不是使用它:
master (id, ...)
value1 (masterId, ...)
value2 (masterId, ...)
@Inheritance(strategy=InheritanceType.JOINED)
。
有关详细信息,请查看此处:http://en.wikibooks.org/wiki/Java_Persistence/Inheritance
但是:每当您使用@Inheritance
时,您都必须为所有内容创建单独的@Entity
课程。
如果您确实需要上面的5表布局,请使用@ManyToMany
。
基本上JPA用于将Java对象映射到SQL表,而不是反过来;)如果你需要做一些使用JPA(或太复杂)无法做到的事情,你总是可以使用JDBC并制作你的查询和实体映射。