首先加入二级缓存的加入包(依赖):
Maven中加入依赖:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>${hibernate.version}</version>
</dependency>
若没有使用Maven构建项目则加入jar包:
加入二级缓存的配置文件:
在hibernate.cfg.xml配置文件中加入以下属性:
<!--启用二级缓存-->
<property name="cache.use_second_level_cache">true</property>
<!--是否使用二级缓存查询结果集-->
<property name="hibernate.cache.use_query_cache">true</property>
<!--配置使用二级缓存的产品-->
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<!--可以将二级缓存配置在这里,也可以用注解配置在entity类中-->
<class-cache class="com.cache.entities.Employee" usage="read-write"/>
如果使用注解,也可以在实体类中使用注解开启需要使用二级缓存的实体类:
package com.cache.entities;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Table(name = "CACHE_EMPLOYEE")
@Entity
public class Employee implements Serializable {
private Integer id;
private String name;
private String email;
private Date birth;
private Date createTime;
private Department dept;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "EMP_ID")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@JoinColumn(name = "DEPT_ID")
@ManyToOne(targetEntity = Department.class,fetch = FetchType.LAZY)
public Department getDept() {
return dept;
}
public void setDept(Department dept) {
this.dept = dept;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Temporal(value = TemporalType.DATE)
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
@Temporal(value = TemporalType.TIMESTAMP)
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", birth=" + birth +
", createTime=" + createTime +
", dept=" + dept +
'}';
}
}
我使用的是hibernate5.2的版本,不知道为什么,我只在一的一端开启了类级别的缓存,去可以缓存到集合中多的一端的所有信息