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;
}
@Hisham你能告诉你如何检索你保存的菜单吗? – 2010-08-06 21:16:04
@Arthur:感谢您的评论。我使用Spring,所以我使用HibernateTemplate的方式如下:template.get(Menu.class,menuID); – Hisham 2010-08-06 21:21:26
你是否正确实现了hashCode/equals? – 2010-08-06 21:28:11