2012-03-27 2 views
1

Необходимо получить данные из базы данных oracle, используя сложную процедуру. Вывод - общий курсор. Я использую hibernate для получения результата. Но набор результатов не имеет сопоставления, так как это не какая-то таблица. как я могу извлечь данные из курсора в мой объект.Hibernate Получение выходных данных из общего курсора

Есть ли способ, которым я могу получить объект resultet ниже, а не список?
Я могу получить соединение с заводом 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

Для этого вам нужно будет определить объект сопоставления клиентов с таблицей Имя, указывающее, какой столбец сопоставляется с каким столбцом .... но мой набор результатов представляет собой комбинацию нескольких таблиц в качестве общего курсора ... Клиент-клиент = (Клиент) customers.get (0); – user1292276

Смежные вопросы