2016-11-25 10 views
1

以下のコードのように条件が満たされた場合、case文でIam連結文字列と式を連結します。jpa criteriaクエリを使用してcase文でconcat関数を使用する方法

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(); 

文iamが例外を下回る場合には、concat関数を記述するためです。私はbuilder.literal()を与えることによってすべての可能な方法を試みたが、私はこの問題を解決することができませんでした。私は2日以来この問題にぶつかった。私を助けてください。

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

でのおかげで、あなたのDBのための適切な方言を設定することがありますか?

+0

はい.....これ以外はすべてクエリが正常に実行されています。 –

+0

私は、生成されたSQLに括弧がないと思います。ここに設定ファイルを投稿してください。 JPAプロバイダの最新バージョンを使用していますか? (:param0 || generatedAlias0.studentRegistrationGrade) –

関連する問題