Boa tarde pessoal!
É o seguinte estou em um projeto que usa EJB3 e JSF.
O problema é o seguinte quando quero fazer uma consulta por exemplo de usuarios, ai estou debugando dentro do meu SessionBean eu visualizo os itens que estão na coleção, os usuarios que estão nessa coleção cada um tem um relacionamento por exemplo com endereço, no session bean quando eu estou em modo de debug e vejo os itens da lista mostra os usuarios e os seguintes relacionamentos, mas quando chego no meu managedBean os outros objetos que estão relacionados com esse usuario não aparecem se eu tentar usar por exemplo o endereço eu recebo um NullPointer.
Isso só acontece quando eu Injeto o EntityManeger no session bean e uso query nativa se usar namedQuery funciona legal.
Alguem já passou por isso? como resolvo isso?
O melhor mesmo é utilizar NamedQuery. É padrão no JPA.
Mesmo assim tenta utilizar INNER JOIN ou RIGHT OUTER JOIN (RIGHT JOIN), na nativa.
Assim (exemplo): caso vc queira o endereço de um usuario:
SELECT endereco FROM Usuario as u RIGHT JOIN u.endereco as endereco WHERE u.qualquer = exemplo qualquer;
ou vc pode retornar uma lista de usuarios pelo endereco tal:
SELECT usuarios FROM Endereco as e INNER JOIN e.usuarios as usuarios WHERE e.cidade = brasilia;
Atenciosamente,
Clesio Júnior
O problema pode ser que seu relacionamento está como Lazy. Quando você está no EJB (A Entity está gerenciada pelo EntityManager) e assim você consegue ver o relacionamento. Quando a Entity fica detached (quando foi para o ManagedBean) o relacionamento Lazy que não foi previamente carregado, irá realmente dar problema.
Aconselho dar uma estudada nessa parte de entity gerenciada, detached, new, etc.