2013-12-14 15 views
5

Tôi đang phát triển chương trình hibernate + ehcache.Ví dụ về bộ nhớ cache cấp hai Hibernate

@Entity 
@Table(name = "pizza") 
public class Pizza implements Serializable{ 
    @Id 
    @GeneratedValue 
    private Integer id; 
    private String name; 
    private double price; 

    public long getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public double getPrice() { 
     return price; 
    } 

    public void setPrice(double price) { 
     this.price = price; 
    } 

} 

ehcache.xml

<cache name="com.abp.osp.domain.Pizza" 
maxElementsInMemory="100" 
eternal="false" 
timeToIdleSeconds="5" 
timeToLiveSeconds="200" /> 
</ehcache> 

tôi đã đề cập trong ehcache bean.xml

<prop key="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</prop> 
     <prop key="hibernate.cache.use_second_level_cache">true</prop> 
     <prop key="hibernate.cache.use_query_cache">true</prop> 
     <prop key="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</prop> 
     <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop> 

và phương pháp gọi điện thoại của tôi trong vòng dao lớp là

Session session1=sessionFactory.openSession(); 

      Pizza pizza2=(Pizza)session1.load(Pizza.class, 2); 
      System.out.println("pizza2--"+pizza2.getName()); 
      session1.close(); 

Session session2=sessionFactory.openSession(); 

      Pizza pizza4=(Pizza)session2.load(Pizza.class, 2); 
      System.out.println("pizza4--"+pizza4.getName()); 
      session2.close(); 

Output là:

Hibernate: select pizza0_.id as id0_0_, pizza0_.name as name0_0_, pizza0_.price as price0_0_ from pizza pizza0_ where pizza0_.id=? 
pizza2--Thin Crust 
Hibernate: select pizza0_.id as id0_0_, pizza0_.name as name0_0_, pizza0_.price as price0_0_ from pizza pizza0_ where pizza0_.id=? 
pizza4--Thin Crust 

Nhưng nó nhấn hai lần trong cơ sở dữ liệu.Tôi không tìm thấy bất cứ điều gì sai trong mã của tôi.Vui lòng cho tôi biết lý do tại sao nó nhấn hai lần trong cơ sở dữ liệu.

Trả lời

2

tôi đã giải quyết question.I tôi cần thêm

@Cache(usage=CacheConcurrencyStrategy.READ_ONLY,region="pizza") 

Trong lớp miền.

@Entity 
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY,region="pizza") 
@Table(name = "pizza") 
public class Pizza implements Serializable{ 
Các vấn đề liên quan