2012-03-27 40 views
1

输出需要使用一个复杂的过程,从Oracle数据库获取数据了。输出是一个通用的游标。我正在使用休眠来获取输出。但结果集没有映射,因为它不是某个表。我怎样才能从光标获取数据到我的对象。休眠充分利用通用光标

有没有一种方法可以得到下面的结果集对象而不是列表?
我可以从Session工厂获得连接并使用可调用语句。这是不错的做法吗?

Query query = session.createSQLQuery(
    "CALL GetStocks(:stockCode)") 
    .addEntity(Stock.class) 
    .setParameter("stockCode", "7277"); 

List result = query.list(); 
for(int i=0; i<result.size(); i++){ 
    Stock stock = (Stock)result.get(i); 
    System.out.println(stock.getStockCode()); 

回答

0

Hibernate提供了应对光标。这是API docs的一个例子。

Session session = sessionFactory.openSession(); 
Transaction tx = session.beginTransaction(); 

ScrollableResults customers = session.getNamedQuery("GetCustomers") 
    .setCacheMode(CacheMode.IGNORE) 
    .scroll(ScrollMode.FORWARD_ONLY); 
int count=0; 
while (customers.next()) { 
    Customer customer = (Customer) customers.get(0); 
    customer.updateStuff(...); 
    if (++count % 20 == 0) { 
     //flush a batch of updates and release memory: 
     session.flush(); 
     session.clear(); 
    } 
} 

tx.commit(); 
session.close(); 

Here是另一个例子。

+0

那么这个你就必须定义一些表名称告诉客户映射对象,列映射到该列....但我ResultSet是多个表的组合作为一个通用的光标...客户客户=(客户)customers.get(0); – user1292276 2012-03-28 02:49:27