引用问题Saving bidirectional ManyToMany我想准确地获得被接受的答案解释为不正确的内容:
A a1 = new A();
A a2 = new A();
B b = new B();
a1.getB().add(b);
b.getA().add(a2);
If this state could be persisted, you would end up with the following entries in the join table:
a1_id, b_id
a2_id, b_id
But upon loading, how would JPA know that you intended to only let b know about a2 and not a1 ? and what about a2 that should not know about b ?
在我的例子中,b 在任何情况下都知道 a1 和 a2 是正确的。
想想亲子关系:
- b 是 a1 的父级并且 a1 是 b 的子级(自然地)
对我来说,只定义一个方向是错误的:
- b 是 a1 的父级而不是 a1 是 b 的子级 (???)
为了获得可接受的答案所解释的内容,我想我需要两个连接表:
a_has_b:
a1_id, b_id
b_has_a
b_id, a2_id
我错了吗??
- 但是,如何获得“同步”双向关系(不仅仅是 ManyToMany)?
- 是否可以使用标准 JPA 功能?
- 否则,是否有任何特定的提供程序实现?
我认为实现
...
public void addB(A a)
{
getA().add(a);
a.getB().add(this);
}
是一个非常丑陋的 hack...
并且在两侧使用两个单向 OneToMany 在 EclipseLink 2.2.0 中不起作用(不太确定,我目前正在尝试)
谢谢:)
最佳答案
使用,
public void addA(A a)
{
getA().add(a);
a.getB().add(this);
}
不是黑客。这是很好的面向对象编程。在任何 Java 模型中,忽略持久性,如果你有一个双向关系,你必须添加到双方来纠正相关的任何事情。您的代码不应仅仅因为您使用或不使用持久性而改变。
如果要单独维护关系,则需要有两个不同的连接表。如果你想要一个单一的 ManyToMany 关系(看起来你想要),那么你必须使用 @ManyToMany 并在一侧设置 mappedBy。
关于java - 从两侧更新双向 ManyToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7546161/