执行使用DB函数的动态查询

时间:2018-02-25 05:45:09

标签: spring spring-mvc spring-data spring-data-jpa jpql

要求:

在查询中将查询存储在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: (

1 个答案:

答案 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