要求:
在查询中将查询存储在DB中,其中有一个where条件,即调用数据库函数。
使用spring MVC我需要获取查询,传递参数并获取返回值。
这是查询:
SELECT COUNT(*)
FROM IncidentHdr ih, IncidentUser iu
WHERE ih.incidentId = iu.incidentHdr.incidentId
AND get_response_team_access (ih.incidentId, :perscode)
这里get_response_team_access是一个返回整数的DB函数。查询工作正常,因为我们使用虚拟数据在DB中进行了测试。
到目前为止我尝试了什么:
@PersistenceContext
private EntityManager em;
@Override
public Long getAlertCount(String queryString, long persCode) throws DataAccessException {
Query q = em.createQuery(queryString);
q.setParameter("perscode", persCode);
return (long) q.getSingleResult();
}
引发例外:
ERROR org.hibernate.hql.internal.ast.ErrorCounter - <AST>:1:293: unexpected AST node: (
antlr.NoViableAltException: unexpected AST node: (
答案 0 :(得分:0)
要从JPQL调用DB函数,您必须使用FUNCTION
关键字。
SELECT COUNT(*) FROM IncidentHdr ih,IncidentUser iu
WHERE ih.incidentId = iu.incidentHdr.incidentId
AND FUNCTION('get_response_team_access',ih.incidentId, :perscode)
使用FUNCTION(以前称为FUNC)从中调用数据库特定的函数 JPQL
<强>用法:强>
您可以使用FUNCTION调用不受支持的数据库函数 直接在JPQL中调用用户或库特定的函数。
来源: http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/j_func.htm