Как работает кеш запросов для скалярных результатов? - PullRequest
1 голос
/ 13 декабря 2011

Я новичок в 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 Ответ

0 голосов
/ 13 декабря 2011

Возможно, вы захотите взглянуть на эту прекрасную статью о кеше 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...