Повторное использование Sql-запроса getCurrentSession Hibernation, - PullRequest
0 голосов
/ 13 мая 2019

У меня есть метод, который вызывает запрос 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 (), в этом базовом запросе одинаковый для каждой итерации.Он выполнялся для первой итерации, а затем завершался неудачей на второй, Получение сеанса закрыто!исключение.

...