我正在尝试对使用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();
都不是 setParameter
或者 setParameterList
当然在这里工作。如何将字符串列表Map到此类型以用作参数?
1条答案
按热度按时间axkjgtzd1#
我找不到解决这个问题的办法。我的解决方法是用java将整个存储过程复制到一个字符串中。在上面的例子中,这意味着我替换了:
具有
在我的实际代码中,这是不受欢迎的,因为存储过程是一组非常长的语句,但在封装时仍然可以工作
BEGIN
以及END
在字符串中。