2010-08-06 115 views
2

我有一個名爲Menu的Hibernate實體,它具有一組組的集合,每個組又有一個MenuItems的集合。舉例來說,菜單可以是餐館,團體可以是午餐和晚餐,其中的菜單項可以是麪食,漢堡,沙拉。集合中的Hibernate集合

我遇到的問題是,一旦我創建菜單並保存它(工作正常),當我嘗試返回菜單時,我得到的數量比最初創建的數量多。因此,以上面的例子來說,如果我在晚餐組和意大利麪午餐中放入漢堡和沙拉,我會返回一個帶有三個(而不是兩個)組的菜單:2個晚餐組(每個都帶有我放入的項目)和1個午餐組。我基本上回歸到每組插入的菜單項的數量。所以如果我插入4個項目,則返回4個組。任何人都知道這可能是爲什麼?

的關係是:菜單組= 1對許多,集團的MenuItems =許多一對多

組不可重複使用。它們對於一個菜單將是唯一的。但是MenuItems可以在許多組中重複使用。

這裏是我的代碼:

class Menu { 
    @Id @GeneratedValue(strategy = GenerationType.AUTO) 
    private long menuID; 

    @OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)  
    @JoinColumn(name="menuID") 
    private List<MenuGroup> groups; 
} 

class MenuGroup { 
    @Id @GeneratedValue(strategy = GenerationType.AUTO) 
    private long groupID; 

    @Sort (type=SortType.NATURAL) 
    @ManyToMany(fetch=FetchType.EAGER) 
    @JoinTable(name="group_menu_item", 
       joinColumns = { @JoinColumn(name = "groupID") }, 
       inverseJoinColumns = { @JoinColumn(name = "menuItemID") }) 
    private SortedSet<MenuItem> menuItems; 
} 

class MenuItem { 
    @Id @GeneratedValue(strategy = GenerationType.AUTO) 
    private long menuItemID; 
} 
+0

@Hisham你能告訴你如何檢索你保存的菜單嗎? – 2010-08-06 21:16:04

+0

@Arthur:感謝您的評論。我使用Spring,所以我使用HibernateTemplate的方式如下:template.get(Menu.class,menuID); – Hisham 2010-08-06 21:21:26

+2

你是否正確實現了hashCode/equals? – 2010-08-06 21:28:11

回答

0

對不起不能評論大氣壓,所以它必須是一個答案。請指定如何在Java映射文件中檢索數據+,您可以使用枚舉類型!指定午餐/晚餐,並取得關係。但是,請提供更多關於如何檢索獲取數據以及映射文件的信息!