【问题标题】:Join multiple secondary tables加入多个辅助表
【发布时间】:2014-11-16 22:05:31
【问题描述】:

我有以下表格:

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 并以某种方式将 value table 连接到该实体。

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_table1value_table1 连接,只能与master_table 连接。

【问题讨论】:

    标签: java hibernate jpa orm


    【解决方案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 并制作您的查询和实体映射。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多