J'ai une entité Hibernate nommée Menu qui a une collection de Groupes, chaque groupe a à son tour une collection de MenuItems. Ainsi, à titre d'exemple, un menu peut être pour un restaurant, les groupes peuvent être le déjeuner et le dîner et le menuItems au sein de ceux-ci peuvent être des pâtes, burger, salade. Le problème que j'ai est qu'une fois que j'ai créé le menu et l'ai enregistré (qui fonctionne bien), quand j'essaye de récupérer le menu j'obtiens plus de groupes qu'ont été créés originalement. Donc, en prenant l'exemple ci-dessus, si je mets Burger and Salad dans le groupe Dinner et Pasta in Lunch, je suis retourné un menu avec TROIS (plutôt que DEUX) groupes: 2 groupes de dîner (chacun avec les articles que je mets) . Je reviens fondamentalement en tant que groupes mayny que le nombre d'articles de menu que j'ai insérés dans chaque groupe. Donc, si j'avais inséré 4 éléments, 4 groupes sont retournés. Quelqu'un sait pourquoi cela peut être?Collections Hibernate dans les collections
Les relations sont: Menu pour groupe = One-to-Many, Groupe MenuItems = Many-to-Many
groupes ne sont pas réutilisés. Ils seront uniques à un menu. Mais MenuItems peut être réutilisé dans plusieurs groupes.
Voici mon 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;
}
@Hisham Pouvez-vous montrer comment vous récupérez vous enregistré Menu ??? –
@Arthur: Merci pour votre commentaire. J'utilise Spring donc j'utilise HibernateTemplate de la manière suivante: template.get (Menu.class, menuID); – Hisham
Implémentez-vous hashCode/equals correctement? –