我在oracle中有一个过程,它返回多个表的连接数据。类似于以下程序的东西
create or replace procedure MyProc(curs OUT sys_refcursor)
as
begin
open curs for
select one.name, one.email, two.address, two.phone_no from table1 one INNER JOIN table2 two
ON one.id=two.id;
end;
/
在对其他表进行处理之后,该过程实际上从第一个表返回8个列,从第二个表返回5个。
现在我不想将返回的数据映射到我的hibernate映射文件中的类。但是当我调用该过程时,返回的数据应该转换为Beans。说上面的程序,我使用以下文件。
Bean.java 保存返回的数据
class Bean
{
String name;
String email;
String address;
long phone_no;
.....
//getter and setters
}
Bean.hbm.xml 用于hibernate
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<sql-query name="temp" callable="true">
{call MyProc(?)}
</sql-query>
</hibernate-mapping>
Call.java 从我调用我的程序
public class Call
{
@Autowired
SessionFactory sessionFactory;
public List<Bean> get()
{
Session session=sessionFactory.openSession();
Query query=session.getNamedQuery("temp");
List<Bean> list;//The result should be converted to a list of Bean
session.close();
return list;
}
}
从我调用我的过程的地方,我希望将返回的数据转换为Bean类的列表。
怎么可能这样做。
我正在使用 Hibernate 3.0 和 Spring 3.0
答案 0 :(得分:-1)
现在回答你的问题。
试试这个:
Query query = sessionFactory.getNamedQuery("temp")
.addScalar("name", StandardBasicTypes.STRING)
.addScalar("email", StandardBasicTypes.STRING)
.addScalar("address", StandardBasicTypes.STRING)
.addScalar("phone_no", StandardBasicTypes.LONG)
.setResultTransformer(Transformers.aliasToBean(Bean.class));
但我会建议让春天打电话给SP并使用RowMapper
完成其余工作的方法,请查看链接:Calling a stored procedure with SimpleJdbcCall
<强>更新强>
然后尝试:
List rawList = sessionFactory.getNamedQuery("temp")
.setResultTransformer(new AliasToBeanResultTransformer(Bean.class)).list();
return (List<Bean>) rawList;