हाइबरनेट दस्तावेज़ीकरण में 'संग्रहीत प्रक्रियाओं का उपयोग करने के लिए नियम/सीमाएं' बताती हैं कि
"प्रक्रिया को एक परिणाम सेट वापस करना होगा। ध्यान दें कि चूंकि ये सर्वर कई परिणाम सेट और अद्यतन गणना वापस कर सकते हैं, हाइबरनेट परिणामों को पुनरावृत्त करेगा और पहला परिणाम लेगा जो इसके वापसी मूल्य के रूप में परिणाम सेट है। बाकी सब कुछ होगा खारिज कर दिया।" (संदर्भ:http://docs. jboss.org/hibernate/orm/3.3/reference/hi/html/querysql.html#sp_query )
जैसा कि कहा गया है, आपके मामले में दूसरे परिणाम को अनदेखा किया जा रहा है।
दोनों परिणाम सेट प्राप्त करने के लिए आपको jdbc का उपयोग करना होगा। या तो आप ऐसा करने के लिए अलग-अलग कक्षाएं बना सकते हैं, या वैकल्पिक रूप से, हाइबरनेट आपको अपने सत्र के 'doWork' और 'doReturningWork' विधियों के माध्यम से पारंपरिक jdbc संचालन करने के तरीके प्रदान करता है...
एक साधारण उदाहरण हो सकता है:
List<Object> res = session.doReturningWork(new ReturningWork<List<Object> /*objectType returned*/>() {
@Override
/* or object type you need to return to process*/
public List<Object> execute(Connection conn) throws SQLException
{
CallableStatement cstmt = conn.prepareCall("CALL YOUR_PROCEDURE");
//Result list that would return ALL rows of ALL result sets
List<Object> result = new ArrayList<Object>();
try
{
cstmt.execute();
ResultSet rs = cstmt.getResultSet(); // First resultset
while (rs.next()) {//Read items/rows of first resultset
// .
// Process rows of first resultset
result.add(obj); // add items of resultset 1 to the returning list object
}
cstmt.getMoreResults(); // Moves to this Statement object's next result, returns true if it is a ResultSet object
rs = cstmt.getResultSet(); // Second resultset
while (rs.next()) {
// .
// Process rows of second resultset
result.add(obj); // add items of resultset 2 to the returning list object
}
rs.close();
}
finally
{cstmt.close();}
return result; // this should contain All rows or objects you need for further processing
}
});