【问题标题】:Table-valued parameters into stored procedure using Hibernate使用 Hibernate 将表值参数转换为存储过程
【发布时间】:2017-12-19 22:59:02
【问题描述】:

我正在尝试对我们使用 Hibernate 的 Session.createSQLQuery 调用的存储过程使用表值参数。

我在 SQL 中创建了一个类型和存储过程:

CREATE TYPE StringListType AS TABLE
(
    StringText NVARCHAR(256)
)

CREATE PROCEDURE [dbo].[TestStringListType]
( 
    @stringList StringListType READONLY
)
AS
    SELECT * FROM @stringList

我可以在 SQL 中使用它:

BEGIN
Declare @StringListTemp As StringListType

insert INTO @StringListTemp (StringText)
values ('foo'), ('bar'), ('baz')

EXEC TestStringListType @StringListTemp
END

我想在 Java 中做的事情是这样的:

String fakeQueryStr = "call TestStringListType :list";
SQLQuery fakeQuery = getSession().createSQLQuery(fakeQueryStr);
ArrayList<String> data = Lists.newArrayList("foo", "bar", "baz");
fakeQuery.setParameter("list", data);
return fakeQuery.list();

当然,setParametersetParameterList 都不在这里工作。如何将我的字符串列表映射到此类型以用作参数?

【问题讨论】:

    标签: java sql sql-server hibernate tsql


    【解决方案1】:

    我无法找到书面的解决方案。我的解决方法是将整个存储过程复制到 Java 中的字符串中。在上面的例子中,这意味着我替换了:

    String fakeQueryStr = "call TestStringListType :list";
    

    String fakeQueryStr = "SELECT * FROM :list";
    

    在我的实际代码中,这是不可取的,因为存储过程是一组明显更长的语句,但在将BEGINEND 包装在字符串中时它仍然有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-30
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多