在hibernate命名查询中调用自定义函数

时间:2012-06-01 18:32:39

标签: java hibernate hql

我正在尝试在命名查询中调用函数,但是我得到了:

java.lang.IllegalStateException: No data type for node:     org.hibernate.hql.ast.tree.MethodNode 
 \-[METHOD_CALL] MethodNode: '('
    +-[METHOD_NAME] IdentNode: 'MYFUNCTION' {originalText=MYFUNCTION}
    \-[EXPR_LIST] SqlNode: 'exprList'
       \-[NUM_INT] LiteralNode: '1'

我的查询类似于

@NamedQuery(name = "myQuery",
            query = " select r, MYFUNCTION(r.id) from ResPO r "
                + " where  r.status like 'A'")

如果我简化了我的查询,一切正常:

@NamedQuery(name = "myQuery",
        query = " select r from ResPO r "
            + " where  r.status like 'A'")

错误是什么? 感谢++

1 个答案:

答案 0 :(得分:1)

您可以通过扩展您正在使用的方言并通过调用registerFunction()方法注册您的功能来实现。

http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/dialect/Dialect.html#registerFunction%28java.lang.String,%20org.hibernate.dialect.function.SQLFunction%29