2010-08-06 111 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映射文件中检索数据+,您可以使用枚举类型!指定午餐/晚餐,并取得关系。但是,请提供更多关于如何检索获取数据以及映射文件的信息!