Hibernate二级缓存使用

首先加入二级缓存的加入包(依赖):

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的版本,不知道为什么,我只在一的一端开启了类级别的缓存,去可以缓存到集合中多的一端的所有信息

猜你喜欢

转载自blog.csdn.net/qq_36722039/article/details/81278335