Duvida Fetch hibernate

Minha duvida consiste no seguinte:
Tenho uma classe Menu e outra MenuItem.
Gostaria que, ao trazer o Menu, a sua respectiva colection de menuitem seja preenchida sem que eu tenha q fazer uma nova busca.
Utilizei o Fetch no mapeamento vejam como ficou:

 @OneToMany(mappedBy = "menuIdmenu",fetch=FetchType.EAGER)
    public Collection<MenuItem> getMenuItemCollection() {
        return menuItemCollection;
    }

Mas ao fazer a seguinte consulta para o Menu:

public static List retornaTodos(Class cls) {
        sessao = sfSessao.openSession();
        List retorno = sessao.createCriteria(cls).list();
        sessao.close();
        return retorno;

    }

Este esta trazendo o mesmo Menu duas vezes!!! :shock:

Alguem saberia me informa oq estou fazendo de errado??
Obrigado…

Veja se voce de fato nao tem itens duplicados, e que os relacionamentos estao certos. Menu tem o seu id, MenuItem tambem tem seu id unico, assim como uma FK para Menu. O Join gerado sera algo como

    select
        menu0_.id as id4_1_,
        menu0_.nome as nome4_1_,
        menuitems1_.menu_id as menu3_3_,
        menuitems1_.id as id3_,
        menuitems1_.id as id5_0_,
        menuitems1_.menu_id as menu3_5_0_,
        menuitems1_.nome as nome5_0_ 
    from
        Menu menu0_ 
    left outer join
        MenuItem menuitems1_ 
            on menu0_.id=menuitems1_.menu_id 
    where
        menu0_.id=?

O que tras os dados esperados, desde que as tabelas tambem estejam com dados corretos.

Rafael

Realmente, nao tenho ideia do que pode estar acontecendo…
o menu nao esta duplicado no banco jah verifiquei varias vezes…
caso alguem ainda tenha interesse em me ajuda, vou postar o mapeamento das duas classes.

  @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idmenu", nullable = false)
    private Integer idmenu;
    @Column(name = "nome")
    private String nome;
    @Column(name = "imagem")
    private String imagem;
    @OneToMany(mappedBy = "menuIdmenu",fetch=FetchType.EAGER)
    private Collection<MenuItem> menuItemCollection;
@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idmenu_item", nullable = false)
    private Integer idmenuItem;
    @Column(name = "nome")
    private String nome;
    
    @ManyToOne(cascade=CascadeType.MERGE)
    @JoinColumn(name = "menu_idmenu")
    private Menu menuIdmenu;
    
    @Column(name = "imagem")
    private String imagem;
    @Column(name = "descricao")
    private String descricao;

A consulta continua a mesma…
Pra ter certeza que os menus sao iguais, apos a consulta verifiquei os IDs e realmente sao iguais…

Qual a query que esta sendo gerada?

Rafael

  select
          this_.idmenu as idmenu6_1_,
          this_.imagem as imagem6_1_,
          this_.nome as nome6_1_,
          menuitemco2_.menu_idmenu as menu5_3_,
          menuitemco2_.idmenu_item as idmenu1_3_,
          menuitemco2_.idmenu_item as idmenu1_7_0_,
          menuitemco2_.descricao as descricao7_0_,
          menuitemco2_.imagem as imagem7_0_,
          menuitemco2_.menu_idmenu as menu5_7_0_,
          menuitemco2_.nome as nome7_0_ 
      from
          menu this_ 
      left outer join
          menu_item menuitemco2_ 
              on this_.idmenu=menuitemco2_.menu_idmenu