我有這個問題,替換函數不工作與eclipselink版本2.5.2。功能和操作符不工作在Eclipselink
這裏是我的代碼:
String sSql = " SELECT e FROM br.com.megasoft.protocolo.entity.Assunto e WHERE (REPLACE(REPLACE(REPLACE(UPPER(e.titulo), '/', ''), '-', ''), '.', '') LIKE UPPER('A'))";
TypedQuery<?> query = getEntityManager().createQuery(sSql, Class.forName(this.tabela));
,第二個參數具有的價值:class br.com.megasoft.protocolo.entity.Assunto
它給出了這樣的例外:
Caused by: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing [ FROM br.com.megasoft.protocolo.entity.Assunto e WHERE (REPLACE(REPLACE(REPLACE(UPPER(e.titulo), '/', ''), '-', ''), '.', '') LIKE UPPER(:valorPesq10)) ].
[54, 150] The expression is not a valid conditional 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)
... 50 more
它工作時,我完全沒問題使用Hibernate。
當我運行簡單的SQL,沒有REPLACE,它工作正常。
觀察:Eclipselink 2.5.2正在使用JPA 2.1。我正在使用Tomcat8,Eclipse Kepler。
我以後會看看這個信息,謝謝!!!! – 2014-10-09 00:48:00