我正在尝试使用hibernate的二级缓存来缓存关联。 首先,我有部门类,用于存储用户列表。
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Department {
@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL, mappedBy="department")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public Set<User> getUsersSet() {
return this.usersSet;
}
然后我有User类存储部门。
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class User{
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="department_id")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public Department getDepartment() {
return this.department;
}
我已在部门和用户类中应用缓存和关联。 此关联存储在缓存中。 sessionFactory.getStatistics()。如果我在关联时启用缓存,则getSecondLevelCacheHitCount()也会增加。 当我尝试检索某个部门时,部门正在缓存并且没有数据库命中,但是,每当我获取某个部门的用户时,我都会看到一个数据库命中:
Set<User> users = department.getUsersSet();
for (User u : users) {
System.out.println("User name : " + u.getFirstName());
}