加入多个辅助表

时间:2014-11-16 22:05:31

标签: java hibernate jpa orm

我有以下表格:

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

1 个答案:

答案 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并制作你的查询和实体映射。