2014-07-24 71 views
1

我在oracle中有一個從多個表中返回連接數據的過程。類似於以下過程的東西將連接數據轉換爲從oracle程序返回的Bean

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爲休眠

<?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類的列表。

怎麼可能做到這一點。

我使用休眠3.0春季3.0

+0

哦這是一個Session接口的方法。請糾正你的評論。 –

+0

好的,我明白了,它來自'SharedSessionContract' .. btw。 'org.hibernate.Session'是一個接口 – Jaiwo99

+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

UPDATE

然後試試:

List rawList = sessionFactory.getNamedQuery("temp") 
    .setResultTransformer(new AliasToBeanResultTransformer(Bean.class)).list(); 
return (List<Bean>) rawList; 
+0

順便說一句,我使用休眠3.0 –

+0

而我無法找到addScalar。 –

+0

@DarshanLila然後嘗試只使用變壓器,它也可能工作 – Jaiwo99

相關問題