JPQL 中的等价物 UTL_RAW.BIT_OR
Equivalent UTL_RAW.BIT_OR in JPQL
我正在尝试创建一个带有结果 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.bitsA, b.bitsB) as java.lang.String) ...
替代方法是在您的方言中将该函数注册为 SQLFunction
并为其提供适当的 return 类型。然后你可以像你原来的问题一样使用。
我正在尝试创建一个带有结果 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.bitsA, b.bitsB) as java.lang.String) ...
替代方法是在您的方言中将该函数注册为 SQLFunction
并为其提供适当的 return 类型。然后你可以像你原来的问题一样使用。