gpt4 book ai didi

java - 无法使用 hibernate 通过存储过程获取多个表实体

转载 作者:IT王子 更新时间:2023-10-28 23:50:37 25 4
gpt4 key购买 nike

这是我的存储过程

Create PROCEDURE  [dbo].getUserAndEnum

AS

BEGIN

select * from user_master where id =1

select * from enum_master where id = 1

End

我用hibernate写的

Session session = HibernateFactory.getSessionFactory().openSession();

Transaction tr = session.beginTransaction();

SQLQuery qr=session.createSQLQuery("getUserAndEnum");

List list = qr.list();

在列表中我只得到用户对象..我的 enum_master 行与 id 1

数据库中有 id 为 1 的 P.S enum_master 行

谢谢。

最佳答案

hibernate 文档中的“使用存储过程的规则/限制”指出

"过程必须返回一个结果集。注意,由于这些服务器可以返回多个结果集和更新计数,Hibernate 将迭代结果并将第一个结果集作为其返回值。一切否则将被丢弃。”(引用:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html#sp_query)

如前所述,您案例中的第二个结果集将被忽略。

您需要使用 jdbc 来获取两个结果集。您可以为此创建单独的类,或者,hibernate 通过其 session 的“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
}
});

关于java - 无法使用 hibernate 通过存储过程获取多个表实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14608667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com