[英]Hibernate: Mapping custom column names in stored procedure named query
[英]Hibernate Named Query or SQL Server Stored Procedure
我需要进行命名查询或存储过程。 这是从通过 Hibernate 连接到 SQL 服务器的 Java 应用程序运行的。 我更喜欢存储过程,但命名查询可能就足够了。
我在 SQL 服务器中有一个表,其中有一列 XML 类型。 这本身并不重要,但它会引起问题。
我的 Hibnerate 命名查询如下所示
<sql-query name="openOrderSummary" callable="true">
<![CDATA[
SELECT * FROM orders
WHERE (order_type in (:firstListOfTypes)
OR order_type in (:secondListOfTypes))
AND open_flag = 'true'
AND customer_id = :customerId
ORDER BY id DESC
]]>
</sql-query>
但是会抛出一个异常,抱怨无法 map JDBC type -16
。 这没有帮助。 于是我通过Hibernate代码调试,发现我的XML类型列有问题。
我更喜欢做一个存储过程,但我找不到一种不费力的方法(我自己) order_type in (:firstListOfTypes)
做字符串列表。 这不是一个固定的清单。 它是从 Java 代码中提取的,它可以随时随着新类型的添加而改变,所以我不能只在查询中将其设为硬编码列表。
我做select *
因为我需要整行。 我正在执行命名查询或存储过程,因为速度是一个因素。 类似的存储过程(在具有非常简单类型的一小部分列上)非常快,它们似乎是即时的。 通过使用Session
和Criteron
等的典型 JDBC 操作运行此信息的正常获取需要几秒钟。 它可能看起来不多,但在这个应用程序中,它很重要。
1)有没有一种合理的方法可以将此列表从 Java 获取到存储过程中?
2) 如果没有,当涉及到我的 xml 专栏时,我该如何绕过 Hibernate 吐槽?
有没有一种合理的方法可以将此列表从 Java 获取到存储过程中?
当然。
将其作为逗号分隔列表传递给 Varchar(max) 或 NVarchar(max) 存储过程参数并使用STRING_SPLIT 。
将其作为 JSON 数组传递给 NVarchar(max) 存储过程参数并使用OPENJSON 。
将其作为 XML 文档传递给 Varchar(max) 或 NVarchar(max) 存储过程参数并使用xml.nodes() (或旧的OPENXML )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.