Second Level Cache in Hibernate

Test.java

package com.deepsingh44.model;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Test {
 public static void main(String[] args) {
  Configuration c = new Configuration();
  c.configure("hibernate.cfg.xml");

  SessionFactory sf = c.buildSessionFactory();

  Session s = sf.openSession();

  Product p = s.get(Product.class, 1);
  System.out.println(p.getName());
  s.close();

  Session s1 = sf.openSession();

  Product p1 = s1.get(Product.class, 1);
  System.out.println(p1.getName());
  s1.close();
 }
}


Product.java

package com.deepsingh44.model;

import javax.persistence.Cacheable;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity
@Table(name="products")
@Cacheable  
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY) 
public class Product {
@Id
private int id;

private String name;
private float price;
public int getId() {
 return id;
}
public void setId(int id) {
 this.id = id;
}
public String getName() {
 return name;
}
public void setName(String name) {
 this.name = name;
}
public float getPrice() {
 return price;
}
public void setPrice(float price) {
 this.price = price;
}

}



hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>    
<!DOCTYPE hibernate-configuration PUBLIC    
          "-//Hibernate/Hibernate Configuration DTD 5.2.0//EN"    
          "http://hibernate.sourceforge.net/hibernate-configuration-5.2.0.dtd">    
    
<hibernate-configuration>    
    
    <session-factory>    
        <property name="show_sql">true</property>    
        <property name="hbm2ddl.auto">update</property>        
        <property name="connection.url">jdbc:mysql://localhost:3306/test</property>    
        <property name="connection.username">root</property>    
        <property name="connection.password">root</property>    
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>    
         
         <property name="cache.use_second_level_cache">true</property>   
         <property name="cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>  
         <mapping class="com.deepsingh44.model.Product"/>  
    </session-factory>    
</hibernate-configuration> 


pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>SecondLevelCache</groupId>
  <artifactId>SecondLevelCache</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <release>10</release>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
  <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.4.1.Final</version>
</dependency>
  <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
</dependency>
  <dependency>  
    <groupId>net.sf.ehcache</groupId>  
    <artifactId>ehcache</artifactId>  
    <version>2.10.3</version>  
</dependency>  
      
     
<dependency>  
    <groupId>org.hibernate</groupId>  
    <artifactId>hibernate-ehcache</artifactId>  
    <version>5.4.1.Final</version>  
    </dependency>
  </dependencies>
</project>


No comments: