sql - 在gral HQL中,我将如何使用(非聚合的)Oracle函数?

标签 sql hibernate grails groovy hql

如果我要从普通sql查询中检索所需的数据,则满足以下条件:

select * from stvterm where stvterm_code > TT_STUDENT.STU_GENERAL.F_Get_Current_term()

我已经为此表正确设置了grails域,并且我可以成功运行以下代码:
def a = SaturnStvterm.findAll("from SaturnStvterm as s where id > 201797") as JSON
a.render(response)
return false

换句话说,我可以对Oracle函数的结果进行硬编码,并使HQL正确运行,但是它阻塞了我可以尝试使用该函数的任何方式。我已经阅读了一些有关使用proc和函数的有关Hibernate的文档,但是我很难理解它。谁能给我一个有关处理此问题的正确方法的提示?

另外,由于我认为这可能是相关的,因此没有任何同义词可以在不将其限定为schema.package.function()的情况下调用该函数。我相信这会使事情变得更加困难。这就是Grails 1.3.7的全部内容,不过如果需要,我可以使用更高的版本。

最佳答案

要在HQL中调用函数,SQL方言必须意识到这一点。您可以在运行时在BootStrap.groovy中添加函数,如下所示:

import org.hibernate.dialect.function.SQLFunctionTemplate
import org.hibernate.Hibernate

def dialect = applicationContext.sessionFactory.dialect
def getCurrentTerm = new SQLFunctionTemplate(Hibernate.INTEGER, "TT_STUDENT.STU_GENERAL.F_Get_Current_term()")
dialect.registerFunction('F_Get_Current_term', getCurrentTerm)

注册后,您应该可以在查询中调用该函数:
def a = SaturnStvterm.findAll("from SaturnStvterm as s where id > TT_STUDENT.STU_GENERAL.F_Get_Current_term()")

关于sql - 在gral HQL中,我将如何使用(非聚合的)Oracle函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11396151/

相关文章:

java - Hibernate 插入两次具有相同的 PK

java - Spring 与 Hibernate 基于注解

version-control - 哪些 grails 项目文件不应添加到版本控制中? (Grails 1.3.x)

node.js - 由 : org. gradle.api.InvalidUserDataException 引起:无法添加任务 ':client:test',因为同名任务已存在

sql - 来自同一张表的高级 SQL SUM 列

sql - 如何使用 PostgreSQL 进行条件求和?

java - ORA-00933 : SQL command not properly ended in a query that runs fine in SQL developer

java - Spring 框架

java - 使用证书身份验证将 Grails 配置为 POST

php - 在 DUPLICATE KEY 错误后获取主键?