1

以下のコードのように条件が満たされた場合、ケースステートメントで文字列と式を連結しています。

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

case ステートメントに concat 関数を記述するため、iam が例外を下回っています。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)

前もって感謝します

4

1 に答える 1

0

DB に適切な方言を設定しましたか?

于 2016-11-26T00:08:11.493 に答える