gpt4 book ai didi

java - @ManyToMany JPA 关系在连接表和 UK 中使用二度关系

转载 作者:行者123 更新时间:2023-11-30 08:02:35 26 4
gpt4 key购买 nike

我有这个实体模型(简化):

@Entity
class A {
@Id
String id;

Collection<B> bs;
}

@Entity
class B {
@Id
String id;

@ManyToOne
@JoinColumn(name = "c_id", nullable = false)
C c;
}

@Entity
class C {
@Id
String id;
}

在 A 和 B 之间添加联接表(多对多关系)并使用 A.id 和 B.c.id 强制执行复合 UK 的最佳方法是什么?

我尝试过这样的事情:

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable
(name = "a_b",
joinColumns = @JoinColumn(name = "a_id"),
inverseJoinColumns = {
@JoinColumn(name = "b_id", referencedColumnName = "id"),
@JoinColumn(name = "c_id", referencedColumnName = "c_id")},
uniqueConstraints = @UniqueConstraint(name = "uk_a_c", columnNames = {"a_id", "c_id"}))

但是我得到了一个MultipleBagFetchException,这很奇怪。这肯定与c_id不是主键的一部分有关。如果我从 inverseJoinColumns 中删除 c_id ,它会按预期工作,但这不是我需要的。

最佳答案

如果 B 和 C 之间是一对一关联,您可以在两者之间共享主键,以便

B.id = C.id = B.c.id

那么连接表唯一键可以在A.id和B.id之间。

关于java - @ManyToMany JPA 关系在连接表和 UK 中使用二度关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31674645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com