【问题标题】:How to Hold multiple results arrived from a procedure in hibernate如何保持从休眠过程中到达的多个结果
【发布时间】:2014-10-30 17:54:22
【问题描述】:

我是 Hibernate 的新手
这里我的问题是我知道如何使用 hibernate 调用 mssql 的存储过程,所以这里我使用了本机查询,我正在调用它

@NamedNativeQueries({
@NamedNativeQuery(
name = "callProc",
query = "EXEC SimpleProc :var,:var1,:var2,
resultClass = resultbean.class
)})

这里我有一个名为 let it be MultiResultProc like

的过程
Create Procedure MultiResultProc
.....
begin
select * from resulttable1;
select * from resulttable2;
select * from resulttable3;
end

那么如何区分这些多个结果类,当我在某些地方搜索时发现 Hibernate 将无法处理 Sybase 和 MSSQL db 的多个结果集。 但我需要那种类型的工作......我的项目有那种类型的多个程序,我们不能再次设计。
**所以请帮帮我**

【问题讨论】:

  • 所有表都有相同的字段?您是否有权更改 StoredProcedure 中的任何内容
  • 感谢 Vicky 的回复,我的三个表都有不同的列,这意味着 table1 包含 5 列 table2 有 16 列,table3 有大约 9 列...

标签: java sql-server hibernate stored-procedures mssql-jdbc


【解决方案1】:

在Hibernate中执行存储过程需要注意什么?

  • 如果您的存储过程中有单个InsertUpdateDelete 操作,那么您必须beginTransactin()commit() 才能生效。
  • Hibernate 只会选择存储过程的第一个结果。例如:如果您编写两个 select 语句,那么第一个结果将被映射到休眠状态,如果是 bean 而没有 bean,它只会将第一个结果作为对象列表返回。

答案是否定的,你不能在休眠中获取所有三个表记录。

【讨论】:

  • 好的,Vicky,我从docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/… 读到了同样的内容,我想问我可以通过哪种方式来克服这个问题,意味着有什么方法可以保存多个结果集
  • 如果所有表都有相同的字段,那么您可以在 select 语句之间使用union。我没试过,但它可能有效
  • 联合是不可能的,当我联合时,我会得到基于投影的结果,它是不可用的
【解决方案2】:

我认为在休眠中使用stored procedure 时需要使用cursors。 这是你应该做的。

  • select * from table1 打开光标
  • select * from table2 加入现有游标。
  • 类似地从表 n 中选择并与现有结果集游标连接。
  • 将返回的游标从休眠映射到适当的类,该类将包含从所有表返回的所有字段。
  • 根据您的需要从课堂上分享结果。

这将节省大量时间和劳力。具体例子请访问this链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 2013-10-28
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    相关资源
    最近更新 更多