2017-03-08 32 views
2

我想在JPQL中執行MySql查詢。
這裏是我的MySQL查詢當嘗試添加條件後,JPQL查詢發出異常

select * from test.employee order by DEG != 'm2',DEG; 

其中test是架構名稱,employee是表名和DEG包含字符串。 我在JPQL中寫了這個,並得到異常。

EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("DBConnectionPU"); 
EntityManager em = emFactory.createEntityManager(); 
Query q = em.createQuery("SELECT em FROM Employee em ORDER BY em.deg != 'm2', em.deg"); 
List<Employee> list = q.getResultList(); 

例外:

Exception Description: Syntax error parsing [SELECT em FROM Employee em ORDER BY em.deg != 'm2', em.deg]. 

[36, 50] The order by item is not a valid expression. 
     at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1605) 
     at dbconnection.DBConnection.main(DBConnection.java:39) 
    Caused by: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.JPQLException 
    Exception Description: Syntax error parsing [SELECT em FROM Employee em ORDER BY em.deg != 'm2', em.deg]. 
    [36, 50] The order by item is not a valid expression. 
     at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildException(HermesParser.java:155) 
     at org.eclipse.persistence.internal.jpa.jpql.HermesParser.validate(HermesParser.java:334) 
     at org.eclipse.persistence.internal.jpa.jpql.HermesParser.populateQueryImp(HermesParser.java:278) 
     at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildQuery(HermesParser.java:163) 
     at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:142) 
     at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:116) 
     at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:102) 
     at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:86) 
     at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1603) 
     ... 1 more 

我試圖用這個條件查詢,它工作正常。在直接的JPQL查詢中有什麼問題?我錯過了什麼嗎?

回答

3

嘗試改變em.deg != 'm2'case when

SELECT em 
FROM Employee em 
ORDER BY CASE WHEN em.deg != 'm2' THEN 1 ELSE 0 END, em.deg 
+0

謝謝!有用 !!背後有什麼理由? –

+0

@FahimFerojeAlJami Emm,對不起,我曾經遇到過這個問題,有時會幫助我解決它,而不是研究它的原因。 – Blank

相關問題