JPQL 中的等效 UTL_RAW.BIT_OR

问题描述

我正在尝试使用结果 DTO 创建一个命名查询,其中有一个我必须使用该函数计算的字段。有没有等价的?

SELECT new BitsDTO( 
UTL_RAW.BIT_OR(b.bitsA,b.bitsB) as bitsCalculated)
FROM Bits b
where b.id = ?;

谢谢。

解决方法

如果你想在 JPQL 中调用数据库函数,你可以这样做

SELECT new BitsDTO(
    function("UTL_RAW.BIT_OR",b.bitsA,b.bitsB)
)
FROM Bits b
where b.id = ?

这样你就可以调用任何数据库函数。第一个参数是函数名。

,

@Simon Martinelli 几乎是对的。从顶级 select 子句项调用数据库函数需要强制转换,以便 Hibernate 知道如何从 JDBC 读取值,如下所示:select new BitsDTO(cast(function('UTL_RAW.BIT_OR',b.bitsB) as java.lang.String) ...

另一种方法是在您的方言中将该函数注册为 SQLFunction 并为其提供正确的返回类型。然后您可以使用就像您在原始问题中使用的那样。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...