Я просматривал старый код в одном из наших приложений и нашел следующий сценарий.
public <T> List<T> getList(boolean isTrue,String name,String empid)
{
Criteria criteria = session.createCriteria(myType);
criteria.add(Expression.eq("name",name)) ;
if(isTrue&&empid!=null){
criteria.add(Expression.eq("id",empid)) ;
}
List<T> result = criteria.list();
return list;
}
Также функция называется двух раз, как показано ниже.
List<T> employeeList = getList(true,name,empId);
if(employeeList.size()==0)
employeeList = getList(false,name,null);
Причина этого сценария в том, что иногда employeeId не будет правильным. В этом случае нам нужно выполнить поиск только по имени сотрудника.
Мои сомнения.
1) Если я выполняю его таким образом, я дважды запрашиваю базу данных?
2) Если да, то можно ли его оптимизировать?
В этом случае Hibernate выполнит запрос дважды, поскольку параметры являются разными.
Вы можете настроить кеш запросов и кеш второго уровня для повышения производительности.
Кэш запросов вернет employeeIds, а кеш второго уровня вернет данные Employee.