2011-08-24 77 views
0

我正在使用遺留數據庫上的JPA。實際的語義是foo擁有該關係,並且它實際上只有一個bar,這將需要@ManyToOne註釋。是否可以將兩個關係映射到單個列?

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

_id結尾的任何內容都是外鍵。此外,foo_bar中的列構成主鍵。

在理想的世界中,我只是垃圾清理foo_bar表,但也有其他應用程序使用相同的數據庫,如果它被遺漏,可能會中斷。我將如何完全映射這種關係?

如果不是,那麼保持這種混亂關係完整性的好方法是什麼?

回答

2

foo.bar_id列映射到ManyToOne的關係。將連接表映射到ManyToMany的關係。請勿在Foo中提供bars集合的訪問器。使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); 
     } 
    } 
} 
0

你可以使用jpa來映射上面的關係。別擔心。

相關問題