当前位置: 首页 > 知识库问答 >
问题:

使用复杂关联表连接JPA实体,而不创建关联实体?

谯阳伯
2023-03-14

我正在尝试使用一个不是很简单的关联表在两个JPA实体之间进行ManyTo许多连接。我想知道是否有一种方法可以在不创建关联表实体的情况下实现这一点(类似于使用@JoinTable)。

表A-ID(PK)
-名称

表b
-ID(PK)
-名称

TableMapping-ID(PK)
-Parent\u ID(FK)--

TableA  
ID     Name 
-----------------------  
A1     Algebra  
A2     Data Structures  
A3     Economics  

TableB  
ID     Name  
------------------------  
B1     Beginner  
B2     Advanced  

TableMapping  
ID     Parent_ID    A_ID     B_ID  
----------------------------------  
1        NULL       NULL       B1  
2        NULL       NULL       B2 
3         1          A1       NULL  
4         2          A2       NULL  
5         2          A3       NULL  


映射以我上面描述的方式存储,原因我不知道,也无法更改。很多地方都在这样使用它,我必须按照它的方式工作。从本质上讲,TableMapping中的数据可以简化为这样的内容。

A_ID    B_ID  
-------------  
 A1      B1
 A2      B2
 A3      B2

根据我对问题的理解,有两种方法可以做到这一点:

  1. 创建关联表的一个实体,并将这两个实体映射到关联表实体。这应该行得通,但如果我可以做@JoinTable之类的事情,而不必为此关联表创建实体,那就太好了,因为它所做的只是将表A中的实体映射到表B中的实体
  2. 创建一个视图,将两个表之间的关联简化为每个映射的单个数据库行,如上图所示。使用@JoinTable中的视图

注意:为了保持代码简单,我没有创建任何getter/setter或构造函数。

@Entity
@Table(name = "TableA")
public class EntityA {

    @Id
    @Column(name = "ID")
    public int id;

    @Column(name = "NAME")
    public String name;

}

@Entity
@Table(name = "TableB")
public class EntityB {

    @Id
    @Column(name = "ID")
    public int id;

    @Column(name = "NAME")
    public String name;

    // Want to add below mapping
    // @ManyToMany
    // @JoinTable or equivalent?? 
    // public Set<EntityA> aEntitySet;
}

我不知道是否有办法使用这个奇怪的映射表连接两个实体,而不创建实体或视图。有办法吗?

共有2个答案

卓云
2023-03-14

如果你的问题是,是否有可能避免创建某种关联实体,我相信答案是否定的。毕竟,它需要一个持久存在的地方。

章光华
2023-03-14

您应该首先学习数据库规范化。你应该选择一个而不是很多个<代码>提示:您可以通过在两个表之间添加另一个表来完成此操作。

此外,您为使用OneTo多国创建的对象必须是List或Set。您可以在此处查找OneTo多国注释

 类似资料:
  • 如果我只传递一个字符串,而不是的列表: 我得到的是:

  • 问题内容: 我有两个表- 一个包含地址,另一个包含照片。它们之间唯一的共同字段是PersonID。这些被映射到两个POJO类Address和Photo。我可以通过创建条件并在字段中添加限制来获取这些表中的详细信息。我们应该如何在两个表上编写联接。是否有可能将结果作为两个对象获得- 地址和照片。 我想做一个左联接,这样我也可以得到没有照片的人的记录。我读过,只有使用hql才有可能,但是也可以使用条件

  • 我有两个persistenceUnits映射到两个不同的Oracle模式,这些模式是相似的,但表名不同。当我尝试部署应用程序时,我得到一个Hibernate异常“Missing table”,这似乎是Hibernate在错误的PersistenceUnit中查找表。 .ear#POIPersistenceUnit\“:org.hibernate.hibernateException:丢失表:POI

  • 我有两个实体与单向@OneTo多项映射: 我想获得所有B实体的列表,它们是匹配限制的A实体的子实体。 这就是我卡住的地方:c.list()将返回给我一个对象列表。我不关心A,我想要B。我如何使用Hibernate标准/预测来完成它?如果有关系,我使用Hibernate 4.2.12 在这种简化的情况下,只是急切地去拿是有意义的;在真实的例子中,有一个由四个一对一的单向关联组成的链,我想让所有(或者

  • 我有一个表,其中包含。 我还有一个硬编码表,其中我已经为每个国家/地区创建了一个区域,国家/地区是主键。 我想加入

  • 我有三个表在我的MySQL数据库,看起来像下面这些: 注意:我从那些表中删除了一些定义部分,比如AUTO_INCREMENT,以便使模式更简单。 我的问题是,我需要将这些表映射到实体类,比如和,但我不知道如何管理表中的列,以及如何管理实体中的这些关系。 我的第一个猜测是: 文件 文件 这些实体将生成我需要的三个表,但在表中没有我真正需要的列。把它放在那里很重要。我还可以创建第三个实体,例如,但我不