[Resolvido] List + Hibernate

3 respostas
R

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

3 Respostas

drsmachado

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.

javaflex

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.

R

Ok pessoal, vou adotar Set mesmo… Muito obrigado!

Abraços

Criado 9 de agosto de 2013
Ultima resposta 12 de ago. de 2013
Respostas 3
Participantes 3