2014-10-30 21 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鏈接。