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

第 2 レベル キャッシュに関するこの優れた記事をご覧になることをお勧めします。

よくわかりませんが、スカラー値をクエリするのではなく、EmployeeuserName でクエリを実行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();
}
于 2011-12-12T22:24:57.693 に答える