繁体   English   中英

Hibernate 命名查询或 SQL 服务器存储过程

[英]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 *因为我需要整行。 我正在执行命名查询或存储过程,因为速度是一个因素。 类似的存储过程(在具有非常简单类型的一小部分列上)非常快,它们似乎是即时的。 通过使用SessionCriteron等的典型 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM