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.