2011-12-12 2 views
1

나 최대 절전 모드에 새로운 오전 내 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와 최대 절전 모드 사용하고 있습니다. 여기에 쿼리 캐시를 올바르게 사용하고 있는지 궁금합니다. 도메인 객체의 경우 쿼리 캐시는 쿼리 문자열과 바인딩 매개 변수의 매핑을 기본 키에 저장한다는 것을 알고 있습니다. 그러나 스칼라 값은 메모리에 어떻게 캐시됩니까?

답변

0

당신은 this excellent article about the 2nd level cache를 살펴 할 수 있습니다.

나는 꽤 잘 모르겠지만, 난 당신이 스칼라 값을 쿼리하지만 userName에 의해 Employee을 조회하고 2 단계 및 쿼리 캐시를 활용하기 위해 DAO 방법에 emp.getEmployeeCode()를 반환하지한다고 생각 :

@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(); 
}