2014-10-30 22 views
0

我对Hibernate
这里我的问题是,我知道如何使用Hibernate调用MSSQL的存储过程,所以在这里我用本机查询和我打电话此如何开多个结果从一个过程中到达休眠

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

在这里,我有一个名为程序让它成为MultiResultProc

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

所以如何sepeciy这些multple resultclass,当我谷歌在一些地方,我发现Hibernate不会处理多个结果集的Sybase和MSSQL数据库。 但我需要这种类型的工作......在这里我的项目有这种类型的多个程序,我们不能再设计。
**所以请帮助我**

+0

所有的表都有相同的字段?您是否有权更改'StoredProcedure'中的任何内容 – 2014-10-30 18:09:19

+0

感谢Vicky的回复,我所有的三张表格都有不同的列,意思是table1拥有5列table2,有16列,table3有9列... – RamBen 2014-10-30 18:15:27

回答

0

在Hibernate中执行存储过程时应该注意什么?

  • 如果您在存储过程中有一个InsertUpdateDelete操作,那么你必须beginTransactin()commit()它才能生效。
  • Hibernate只会选择存储过程的第一个结果。例如:如果你写了两个select语句,那么在bean和没有bean的情况下,第一个结果将被映射为hibernate,它只会返回第一个结果作为对象列表。

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

+0

Ok Vicky, 我从https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/querysql.html#d0e17495中读到了相同的内容,我在问我能以哪种方式解决这个问题,方法是方法来保存多个结果集 – RamBen 2014-10-30 18:23:44

+0

如果所有表都有相同的字段,那么你可以在select语句之间使用'union'。我没有尝试,但它可能工作 – 2014-10-30 18:35:19

+0

联盟是不可能的,当我做联盟时,我会得到基于投影的结果,它是无法使用的 – RamBen 2014-10-30 18:48:31

0

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

  • 打开光标select * from table1
  • select * from table2加入到现有的光标。
  • 同样从表n中选择并与现有的结果集游标结合。
  • 将返回的游标从hibernate映射到适当的类,该类将包含从所有表返回的所有字段。
  • 根据您的需求从班级中分发结果。

这会节省大量的时间和人力。有关精确示例,请访问this链接。