开发者

Hibernate collections within collections

开发者 https://www.devze.com 2023-01-10 09:01 出处:网络
I have a Hibernate entity named Menu which has a collection of Groups, each group in turn has a collection of MenuItems.So as an example, a menu can b开发者_如何学Goe for a restaurant, groups can be L

I have a Hibernate entity named Menu which has a collection of Groups, each group in turn has a collection of MenuItems. So as an example, a menu can b开发者_如何学Goe for a restaurant, groups can be Lunch and Dinner and the menuItems within these can be Pasta, Burger, Salad.

The problem I'm having is that once i have created the menu and saved it (which works fine), when i try to get the menu back I am getting more groups than were originally created. So taking the example above, if i put Burger and Salad in Dinner group and Pasta in Lunch, I am returned a Menu with THREE (rather than TWO) groups: 2 Dinner groups (each with the items i put in) and 1 Lunch group. I basically get back as mayny groups as the number of menu items i inserted into each group. So if i had inserted 4 items, 4 groups are returned. Anyone know why this may be?

The relationships are: Menu to Group = One-to-Many, Group to MenuItems = Many-to-Many

Groups are not reused. They will be unique to one menu. But MenuItems can be reused in many groups.

Here is my code:

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;
}


Sorry can not comment atm, so it has to be an answer. Pls specify how you retrieve your data + in the java mapping files you could use enum types ! specify lunch / dinner, and fetch relationships. But pls give more info on how you retrieve fetch your data as well as mapping file !

0

精彩评论

暂无评论...
验证码 换一张
取 消