是否可以使用单个列映射两个关系?

时间:2011-08-24 09:30:35

标签: java hibernate jpa

我正在使用旧版数据库上的JPA。实际的语义是foo拥有该关系,并且它实际上只有一个bar,这需要@ManyToOne注释。

foo     (id, bar_id)
foo_bar (foo_id, bar_id)
bar     (id)

_id结尾的任何内容都是外键。此外,foo_bar中的列构成了主键。

在一个理想的世界中,我只会删除foo_bar表,但是还有其他应用程序使用相同的数据库,如果它被省略,可能会中断。我如何完全映射这种关系?

如果没有,那么保持这种混乱关系完整性的好方法是什么?

2 个答案:

答案 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来映射上面的关系。不用担心。