将连接数据转换为从oracle过程返回的Bean

时间:2014-07-24 09:12:12

标签: java spring hibernate

我在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

1 个答案:

答案 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;