【发布时间】:2018-10-01 04:24:03
【问题描述】:
我有三个实体:A、B和C,它们之间的关系如下:
class A{
@ManyToMany
List<B> bs;
//other attributes and getter setters
}
class B{
@ManyToMany
List<C> cs;
//other attributes and getter setters
}
class C{
//other attributes and getter setters
}
但是从我当前的实体类中,我可以使用@JoinTable 在任意两个表之间建立关系。但我想要的是将所有 3 个实体之间的关系保存在一个单独的表中,将这些实体的主键作为列。 (外键)
如果我们假设实体B 和C 已经保存(插入)到数据库中,我插入A 的新实体如下:
A:{
"A_id": 1
B:[
"B_id": 1
{
C:[
{"C_id": 1}, {"C_id": 2}
]
},
{
"B_id": 2
C:[
{"C_id": 2}
]
}
]
}
那么A应该保存在它的表中,并且关系应该在一个单独的表中列出如下:
A_id B_id C_id
=====================
1 1 1
1 1 2
1 2 2
我见过here 的一个相关问题。但我认为我的情况有所不同,因为所有实体A、B 和C 之间存在多对多关系。
我不是要完整的代码。只要能解决目的,任何方法或确切的参考都可以。谢谢
编辑:
我已经尝试实现答案中提到的单独关系表。但是这种方法的问题是,当我从关系表中删除一行时,它也会从B 和C 的连接表中删除条目。 (影响实体B和C之前的关系)
同样在更新行时,它会更改(执行插入)到实体B 和C 的连接表中。这不是预期的行为。我希望这张表仅用于存储实体之间的关系,而不是用于更改这些实体之间的先前关系。
以下是我的新关系表:
@Entity
@Table(name = "relation_table")
public class RelationEntity {
@Id
@Column(name = "pk_relation_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer relatoinId;
@OneToOne
@JoinColumn(name = "a_id")
private A a;
@OneToOne
@JoinColumn(name = "b_id")
private B b;
@OneToOne
@JoinColumn(name = "c_id")
private C c;
//getter and setters
}
【问题讨论】:
-
有什么理由你想要那个?对我来说,这似乎是一个破碎的概念
标签: java database hibernate spring-boot spring-data-jpa