У меня есть объект 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;
}
@ Hisham Можете ли вы показать, как вы можете восстановить сохраненное меню ??? –
@Arthur: Спасибо за ваш комментарий. Я использую Spring, поэтому я использую HibernateTemplate следующим образом: template.get (Menu.class, menuID); – Hisham
Вы реализуете hashCode/equals правильно? –