2010-08-06 8 views
2

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

@Hisham Pouvez-vous montrer comment vous récupérez vous enregistré Menu ??? –

+0

@Arthur: Merci pour votre commentaire. J'utilise Spring donc j'utilise HibernateTemplate de la manière suivante: template.get (Menu.class, menuID); – Hisham

+2

Implémentez-vous hashCode/equals correctement? –

Répondre

0

Désolé ne peut pas commenter atm, donc il doit être une réponse. SVP spécifiez comment vous récupérez vos données + dans les fichiers de mapping java vous pouvez utiliser les types d'énumération! spécifier le déjeuner/dîner, et chercher des relations. Mais pls donne plus d'informations sur la façon dont vous récupérez récupérer vos données ainsi que le fichier de cartographie!

Questions connexes