2010-08-06 5 views
2

У меня есть объект Hibernate под названием Menu, в котором есть коллекция групп, каждая группа, в свою очередь, имеет коллекцию MenuItems. Так, например, меню может быть для ресторана, группы могут быть обедом и ужином, а в меню можно найти пасту, бургер, салат.Коллекции спящего режима в коллекциях

Проблема, с которой я сталкиваюсь, заключается в том, что как только я создал меню и сохранил его (что отлично работает), когда я пытаюсь вернуть меню, я получаю больше групп, чем изначально созданных. Поэтому, взяв пример выше, если я положил Burger and Salad в группу Dinner и Pasta в Lunch, мне возвращено меню с тремя (а не двумя) группами: 2 группы ужина (каждый с элементами, которые я положил) и 1 группа обеда , Я в основном возвращаюсь как майские группы, как количество пунктов меню, которые я вставил в каждую группу. Поэтому, если я вставил 4 элемента, возвращаются 4 группы. Кто-нибудь знает, почему это может быть?

Отношения являются: Меню для группы = один-ко-многим, Группе 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 Можете ли вы показать, как вы можете восстановить сохраненное меню ??? –

+0

@Arthur: Спасибо за ваш комментарий. Я использую Spring, поэтому я использую HibernateTemplate следующим образом: template.get (Menu.class, menuID); – Hisham

+2

Вы реализуете hashCode/equals правильно? –

ответ

0

К сожалению, не могу комментировать атм, поэтому он должен быть ответ. Pls указывает, как вы извлекаете свои данные + в файлы сопоставления java, которые вы могли бы использовать типы перечислений! указать обед/ужин и получить отношения. Но pls дают больше информации о том, как вы получаете выборку ваших данных, а также файл сопоставления!

Смежные вопросы