1

我是 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();

我正在使用带有 EhCache 的 Hibernate。我想知道我是否在这里正确使用查询缓存?我知道对于域对象,查询缓存存储从查询字符串和绑定参数到主键的映射。但是,标量值是如何缓存在内存中的?

4

1 回答 1

0

您可能想看看这篇关于二级缓存的优秀文章

我不太确定,但我认为您不应该查询标量值,而是Employee按 userName 查询并emp.getEmployeeCode()在您的 DAO 方法中返回以利用第二级和查询缓存:

@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();
}
于 2011-12-12T22:24:57.693 回答