2012-03-27 42 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