2013-02-22 143 views
3

我想構建一個JPA應用程序。我基本上JPA多個OneToMany關係到同一個實體

@Entity 
public class Folder { 
    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 
    private int id; 
    private String description; 
    private String name; 

    @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST) 
    private List<AbstractItem> items = new LinkedList<AbstractItem>(); 

    @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST) 
    private List<AbstractItem> items2 = new LinkedList<AbstractItem>(); 
    . 
    . 
    . 
} 

我可以成功添加一個項目到item名單,並堅持它。但是,如果我再次加載它,持久物品的同一對象在列表itemsitems2中。

我試圖通過添加@JoinTable註釋來解決這個問題,但是我無法讓它工作。

有什麼建議嗎?

+0

這裏有一個代碼味道(重複映射和接近重複的變量名稱)。 *你真的想完成什麼?* – Perception 2013-02-22 12:41:50

+0

這只是一個小例子來澄清問題。我在其中遇到問題的實際環境將大到在這裏發佈 – Simiil 2013-02-22 13:36:05

回答

3

對於每種情況,您應該對AbstractItem中的'文件夾'有兩個引用。因此,值的mappedBy應相應規定,例如:

@OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST) 
    private List<AbstractItem> items = new LinkedList<AbstractItem>(); 

    @OneToMany(mappedBy = "parent2", cascade = CascadeType.PERSIST) 
    private List<AbstractItem> items2 = new LinkedList<AbstractItem>(); 
1

mappedBy屬性被鏈接到一個名爲的AbstractItemparent一個獨特的屬性,換句話說,你用相同的屬性鏈接AbstractItemFolder
如果將第二個列表映射爲parent2,則會有AbstractItemFolder表中的2個外鍵。
如果您不需要AbstractItem中的新屬性和新列,請使用兩個關聯表(對於itemsitems2)。

相關問題