У меня есть метод, который вызывает запрос getCurrentSession каждый раз в цикле, в котором я буду передавать разные параметры на каждой итерации. Теперь я хочу вызвать запрос getCurrentSession только один раз и передать параметры в цикле
Я использую Hibernate, с пружиной - сервер Liberty, базу данных DB2.
//Original Code
for (.obj:objs.){
public list getQty(obj){
String baseQuery = getQuery();
SQLQuery searchQuery = sessionFactory.getCurrentSession().createSQLQuery(baseQuery);
searchQuery.setParameter(0,obj.id);
searchQuery.setParameter(1,obj.name);
return searchQuery.list;
}
......
...
}
//AFTER Modification
SQLQuery searchQuery;
boolean isFirstCall = true;
for (.obj:objs.){
public list getQty(obj){
String baseQuery = getQuery();
SQLQuery searchQuery = getSessionQuery(baseQuery);
searchQuery.setParameter(0,obj.id);
searchQuery.setParameter(1,obj.name);
}
............
.
...........
}
public SQLQuery getSessionQuery(String baseQuery){
if(isFirstCall){
searchQuery = sessionFactory.getCurrentSession().createSQLQuery(baseQuery);
isFirstCall = false
}
return searchQuery;
}
All the above code is placed in DAO layer
Метод getQty () включен в цикл, поэтому каждый раз, когда он получает текущий сеанс (посмотрите блок ORIGINAL CODE), ивозвращает список для определенных параметров id / name соответственно, чтобы избежать этого (посмотрите блок AFTER Modification), я создал другой метод getSessionQuery (), в этом базовом запросе одинаковый для каждой итерации.Он выполнялся для первой итерации, а затем завершался неудачей на второй, Получение сеанса закрыто!исключение.