Как работает кеш запросов для скалярных результатов?
Я новичок в Hibernate, и у меня есть следующий фрагмент кода в моем классе реализации DAO:
public Integer getEmployeeCode(String userName) {
Session session = sessionfactory.getCurrentSession();
Query q = session.createQuery("select emp.employeeCode from Employee emp where emp.userName = :username");
q.setString("username",userName);
Integer p = (Integer) q.setCacheRegion("UserNameToCode").setCacheable(true).uniqueResult();
Я использую Hibernate с EhCache. Мне интересно, правильно ли я использую кеш запросов здесь? Я понимаю, что для объектов домена кэши запросов хранят сопоставление строки запроса и параметров привязки к первичным ключам. Однако как скалярные значения кэшируются в памяти?
1 ответ
Возможно, вы захотите взглянуть на эту прекрасную статью о кэше 2-го уровня.
Я не совсем уверен, но я думаю, что вы не должны запрашивать скалярное значение, а запрашивать Employee
по userName и возврат emp.getEmployeeCode()
в вашем методе DAO, чтобы воспользоваться преимуществами 2-го уровня и кеша запросов:
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
class Employee {
@Column
Integer employeeCode;
}
public Integer getEmployeeCode(String userName) {
Session session = sessionfactory.getCurrentSession();
Query q = session.createQuery("from Employee emp where emp.userName = :username");
q.setString("username", userName);
Employee emp = q.setCacheRegion("Employee").setCacheable(true).uniqueResult();
return emp.getEmployeeCode();
}