我正在使用旧版数据库上的JPA。实际的语义是foo
拥有该关系,并且它实际上只有一个bar
,这需要@ManyToOne
注释。
foo (id, bar_id)
foo_bar (foo_id, bar_id)
bar (id)
以_id
结尾的任何内容都是外键。此外,foo_bar
中的列构成了主键。
在一个理想的世界中,我只会删除foo_bar
表,但是还有其他应用程序使用相同的数据库,如果它被省略,可能会中断。我如何完全映射这种关系?
如果没有,那么保持这种混乱关系完整性的好方法是什么?
答案 0 :(得分:2)
将foo.bar_id
列映射到ManyToOne
关系。将联接表映射到ManyToMany
关系。不要在bars
中为Foo
的集合提供访问者。使setBar()
清除条形集合并添加新条形图。
这样,ManyToMany关联完全封装在ManyToOne关联处理中。
public class Foo {
@ManyToOne
@JoinColumn(name = "bar_id")
private Bar bar;
@ManyToMany
@JoinTable(...)
private Set<Bar> bars = new HashSet<Bar>();
// no getter, setter or any other method for the bars collection
public void setBar(Bar bar) {
this.bar = bar;
this.bars.clear();
if (bar != null) {
this.bars.add(bar);
}
}
}
答案 1 :(得分:0)
你可以用jpa来映射上面的关系。不用担心。