Galera realizando testes descobri o seguinte:
Considerando as seguintes Entitys Class:
Pessoa (Pessoa possui uma lista de Email e Endereços)
Email
Endereco
Usando Set<>
1° Se eu uso Set<> com fetch=FetchType.EAGER nos mapeamentos funciona! Os seja, o metodo find do EntityManager traz os Sets preenchidos!
2° Se eu uso Set<> com fetch=FetchType.LAZY nos mapeamentos o método find do EntityManager retorna o seguinte erro:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:
- Quando utilizo Set mesmo sem fazer
fetch=FetchType.EAGER consigo fazer o seguinte jp ql:
select p from Pessoa p
join fetch p.emailSet em
join fetch p.enderecoSet en
where p.pesId = 1
=====================================================================================
Usando List<>
1° Se eu uso List<> com fetch=FetchType.EAGER nos mapeamentos o método find do EntityManager retorna o seguinte erro:
org.hibernate.HibernateException: cannot simultaneously fetch multiple bags
2° Se eu uso List<> com fetch=FetchType.LAZY nos mapeamentos o método find do EntityManager retorna o seguinte erro:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:
- Quando utilizo List de nenhuma maneira consigo fazer o seguinte jp ql:
select p from Pessoa p
join fetch p.emailList em
join fetch p.enderecoList en
where p.pesId = 1
pois tenho o seguinte erro:
org.hibernate.HibernateException: cannot simultaneously fetch multiple bags
- Utilizando List eu consigo fazer o seguinte jp ql e funciona!
select p from Pessoa p join fetch p.emailList
Galera só não consigo entender porque utilizando Set funciona e com List não funciona! Alguém poderia explicar?