【发布时间】:2019-10-29 21:03:54
【问题描述】:
我正在尝试使用不是很简单的关联表在两个 JPA 实体之间进行多对多连接。我想知道是否有一种方法可以在不创建关联表实体的情况下实现这一点(类似于使用@JoinTable)。
数据库架构
表A
- 身份证(PK)
- 名称
表B
- 身份证(PK)
- 名称
表格映射
- 身份证(PK)
- Parent_ID (FK) --> TableMapping.ID
- A_ID (FK) --> TableA.ID
- B_ID (FK) --> TableB.ID
示例
表A 身份证名称 ---------------------- A1代数 A2 数据结构 A3 经济学 表B 身份证名称 ---------------------- B1初学者 B2 高级 表映射 ID Parent_ID A_ID B_ID ---------------------------------- 1 空 空 B1 2 空 空 B2 3 1 A1 空 4 2 A2 空 5 2 A3 空映射以我上面描述的方式存储,原因我不知道,我无法更改。它在很多地方都被这样使用,我必须按照它的方式工作。本质上,TableMapping 中的数据可以简化成这样。
A_ID B_ID ------------- A1 B1 A2 B2 A3 B2根据我对问题的理解,有两种方法:
- 创建关联表的实体,并将两个实体与关联表实体进行映射。这应该可行,但如果我可以执行 @JoinTable 之类的操作而不必为此关联表创建实体,那就太好了,因为它所做的只是将 TableA 中的实体映射到 TableB 中的实体。
- 创建一个视图,将两个表之间的关联简化为每个映射的单个数据库行,如上所示。使用@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;
}
我不知道是否有一种方法可以在不创建实体或视图的情况下使用这个奇怪的映射表连接两个实体。有办法吗?
【问题讨论】:
标签: java sql-server hibernate