2012-12-14 15 views
0

當我的應用程序啓動時,JPA給我一個錯誤。該錯誤是在命名查詢:指定查詢中的例外

org.hibernate.HibernateException: Errors in named queries: MyEntity.MyQuery org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:435) 
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385) 
org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954) 
org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:883) 
org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56) 
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48) 
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32) 

實體代碼:

@NamedQuery(name = "MyEntity.MyQuery", query = "SELECT r FROM MyEntity r WHERE r.cdSecao = :secao AND r.cdPublico IN :publico") 


// other class stuff declarations... 


    @JoinColumn(name = "cd_publico", referencedColumnName = "cd_publico") 
@ManyToOne 
private TbPublico cdPublico; 

@JoinColumn(name = "cd_secao", referencedColumnName = "cd_secao") 
@ManyToOne 
private TbSecao cdSecao; 

// getters setters and assorted shenanigans... 
在DAO

然後,我用這個方法來調用它,即使該異常是在該初始化拋出EntityManager(因爲它有一個命名查詢和東西)。但對於完整起見,這裏有雲:

public List<MyEntity> listMyEntity(String idPublico, TbSecao secao) { 
    List<TbPublico> listaPublico = OtherClass.doMcGuffin(idPublico); 

    EntityManager em = EMFactory.getEntityManager(); 
    TypedQuery<MyEntity> theQuery= em.createNamedQuery("MyEntity.MyQuery", MyEntity.class); 
    theQuery.setParameter("secao", secao); 
    theQuery.setParameter("publico", listaPublico); 

    return theQuery.getResultList(); 

} 

回到命名查詢......如果我刪除它的工作AND r.cdPublico IN :publico,但我需要它。

回答

1

修改這樣

設定R FROM myEntity所r中查詢WHERE r.cdSecao =:secao和r.cdPublico IN(:檢察署)

當您使用IN statemet在你的查詢中,那麼它應該進入()。

+0

括號做了訣竅。 – Mindwin

0

請解釋一個TbPublico如何可以在一個List<Integer> ???它可能是在List<TbPublico>

+0

*** MAYBE *** TYPO。爲了模糊真實的源代碼(公司政策),我必須改變一些東西,所以我可以在S.O上發佈它。沒有我的老闆拉我的耳朵。 – Mindwin

+0

此外,這不是一個真正的答案,你應該使用這樣的東西評論,我認爲;() – Mindwin

+0

如果你有一個錯字,我建議你糾正你的問題,因爲顯然,因爲它是目前我*答案*在它的錯誤,並因此爲您的JPA提供程序引發異常的可能原因。 – DataNucleus