[Resolvido] List + Hibernate

Boa noite pessoal,

Estou com um problema bem complexo de se resolver…

Em uma determinada entidade, criei 2 relacionamentos @OneToMany usando List, o que causa o conhecido erro de multiple bags no Hibernate.

Algumas soluções deram parcialmente certo, porém todas geram desvantagens enormes, e tal módulo já está “pronto”, e causaria grande prejuízo ter q mudar algumas coisas, gostaria de uma luz de vcs que são mais experiente que eu, segue as soluções:

  1. Usar anotação @IndexColumn: Resolve o erro, mas ou cria tabelas a mais, ou se eu indexar pela PK, gera objetos nulos na List.

  2. Trocar a List por Set: O problema disso é que uso JSF 2.0 + Hibernate… e não consigo ligar por exemplo um dataTable a um Set diretamente… Isso geraria prejuízo de produtividade muito grande… Além disso, mtos método usam list.get(index)… coisa que Sets não tem…

  3. FetchType.EAGER: Pior de todas, muitos locais não uso os ítens da coleção… e isso acarretaria em mtos selects desnecessários…

  4. @Fetch(FetchMode.SUBSELECT): Porém, em um determinado cenário do sistema, preciso trazer uma lista de objetos, com suas listas já carregadas também, e não consegui uma maneira de criar uma query ou criteria que carregasse desta maneira…

Alguém tem alguma sugestão???

Abraços

A opção 2 é mais adequada ao teu cenário.
Qualquer collection pode ser transformada facilmente em uma List, pois as implementações padrão desta aceitam coleções como argumento de um de seus construtores e a perda de produtividade seria mínima.

Deixa Lazy no mapeamento e usa Criteria para cada consulta, aplicando fetch desejado para cada caso, assim terá um único SQL executado. O que drsmachado falou é importante também, use Set.

Ok pessoal, vou adotar Set mesmo… Muito obrigado!

Abraços