【问题标题】:To execute a dynamic query which using DB function使用 DB 函数执行动态查询
【发布时间】:2018-08-04 20:27:38
【问题描述】:

要求:

将查询存储在数据库中,在查询中有一个 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: (

【问题讨论】:

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


    【解决方案1】:

    要从 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 2013-01-06
      • 2016-08-06
      • 2011-12-01
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      相关资源
      最近更新 更多