Bru*_*nco 6 java jpa eclipselink java-ee
我有这个问题,REPLACE功能不适用于eclipselink版本2.5.2.
这是我的代码:
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));
Run Code Online (Sandbox Code Playgroud)
第二个参数的值为: 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
Run Code Online (Sandbox Code Playgroud)
当我使用Hibernate时它完全正常.
当我运行简单的SQL,没有REPLACE,它工作正常.
Obs:Eclipselink 2.5.2正在使用JPA 2.1.我正在使用Tomcat8,Eclipse Kepler.
I have found the solution, thank you guys for the useful informations.
The sql needs to be this way:
SELECT e FROM br.com.megasoft.protocolo.entity.Assunto e WHERE FUNCTION('REPLACE', e.titulo, '/', '') LIKE UPPER('A')
Run Code Online (Sandbox Code Playgroud)
This way, I will be using the FUNCTION defined in JPA 2.1 spec.
| 归档时间: |
|
| 查看次数: |
2879 次 |
| 最近记录: |