Boa tarde a todos, gostaria de saber se alguns de vcs poderiam me esclarecer como é feito um SELECT em uma entidade que possui dois relacionamentos @ManyToMany, não sei se estou fazendo do jeito certo, mas ao pesquisar sobre o assunto não consigo encontrar nada a respeito. segue o código:
Ocorrencia.class
@Entity
@Table(name = "OCORRENCIA")
@NamedQuery(name = "Ocorrencia.buscarOcorrenciaPorIdComEnvolvidosGuardas",
query = "SELECT o
FROM Ocorrencia o
LEFT JOIN FETCH o.envolvidos
LEFT JOIN FETCH o.guardas
WHERE o.id_ocorrencia = :id_ocorrencia") //esta é a consuta
public class Ocorrencia implements Serializable {
private static final long serialVersionUID = 1L;
public static final String BUSCAR_OCORRENCIA_POR_ID_COM_ENVOLVIDOS_E_GUARDAS = "Ocorrencia.buscarOcorrenciaPorIdComEnvolvidosGuardas";
//Outros Atributos
@ManyToMany
private List<Envolvido> envolvidos;
@ManyToMany
private List<GuardaMunicipal> guardas;
//Getters e Setters
}
A busca deste jeito me traz o erro:
Erro Console
FATAL: JSF1073: java.lang.ExceptionInInitializerError obtido durante o processamento de RENDER_RESPONSE 6: UIComponent-ClientId=, Message=null
FATAL: No associated message
java.lang.ExceptionInInitializerError
at br.com.facade.EnvolvidoFacade.<init>(EnvolvidoFacade.java:16)
at br.com.bean.OcorrenciaMB.<init>(OcorrenciaMB.java:41)
Caused by: javax.persistence.PersistenceException: Unable to build entity manager factory
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:81)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at br.com.dao.GenericDAO.<clinit>(GenericDAO.java:21)
... 72 more
Caused by: org.hibernate.HibernateException: Errors in named queries: Ocorrencia.buscarOcorrenciaPorIdComEnvolvidosGuardas
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:544)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:399)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:73)
... 75 more
Eu uso esta @NamedQuery com apenas um join e ela funciona
InstrucaoDeServico.class
@Entity
@Table(name = "INSTRUCAO_DE_SERVICO")
@NamedQuery(name = "InstrucaoDeServico.buscarInstrucaoPorIdComGMs",
query = "SELECT ids
FROM InstrucaoDeServico ids
LEFT JOIN FETCH ids.guardas
WHERE ids.id_instrucao = :id_instrucao")
public class InstrucaoDeServico implements Serializable {
private static final long serialVersionUID = 1L;
public static final String BUSCAR_INSTRUCAO_POR_ID_COM_GMS = "InstrucaoDeServico.buscarInstrucaoPorIdComGMs";
//Outros Atributos
@JoinColumn(name = "fk_endereco", referencedColumnName = "id_endereco")
@ManyToOne
private Endereco cod_endereco;
@ManyToMany
private List<GuardaMunicipal> guardas;
//Getters e Setters
}
A dúvida é como fazer o select para trazer as listas dos @ManytoMany se alguém puder ajudar desde já agradeço.