2016-11-25 53 views
1

IAM的串聯串和表達的情況下,語句時的條件滿足如下所述的代碼中使用concat函數在case語句。如何使用JPA條件查詢

CriteriaBuilder builder = em.getCriteriaBuilder(); 
CriteriaQuery<Object[]> cq = builder.createQuery(Object[].class); 
Root<StudentRegistration> root = cq.from(StudentRegistration.class); 
Expression<Object> str = builder.selectCase().when(builder.greaterThanOrEqualTo(root.get(StudentRegistration_.studentRegistrationGrade), 3),builder.concat("CDATA",root.get(StudentRegistration_.studentRegistrationGrade))).otherwise("-1"); 
cq.select(str); 
em.createQuery(cq).getResultList(); 

由於編寫concat函數的情況下,語句iam得到下面的異常。我試圖通過給builder.literal(),但IAM未能解決這個問題的所有可能的方式。自兩天以來,我一直在觸及這個問題。請幫助我。

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: || near line 1, column 314 [select case when generatedAlias0.studentRegistrationGrade >=3 then :param0 || generatedAlias0.studentRegistrationGrade else :param1 end from StudentRegistration as generatedAlias0] 
     at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1750) 

在此先感謝

回答

0

你有沒有設置正確的話你的數據庫?

+0

是.....所有的查詢,不同的是這個運行良好。 –

+0

我認爲,生成的SQL缺少括號。在這裏發佈你的配置文件。您使用的是最新版本的JPA提供程序嗎? (:參數0 || generatedAlias0.studentRegistrationGrade) –