【发布时间】:2020-03-26 23:51:38
【问题描述】:
我需要确保只创建同一实体的一个对象(就像使用一级休眠缓存加载数据时所做的那样,以简化实体刷新)并且我想使用二级缓存。
我正在测试 ehcache,但无法使其正常工作。通常,我的应用程序中的实体嵌套在其他实体中,但这只是一个简单的使用示例:
a) 使用一级缓存的示例,效果很好:
session = HibernateUtil.getSessionFactory().openSession();
transaction = session.getTransaction();
transaction.begin();
Person person=session.get(Person.class, 1L);
Person person2=session.get(Person.class, 1L);
transaction.commit();
session.close();
System.out.println(person2 == person);
它返回真
b) 在 Ehcache 中使用二级缓存
//1. load person with id 1
session = HibernateUtil.getSessionFactory().openSession();
transaction = session.getTransaction();
transaction.begin();
Person person=session.get(Person.class, 1L);
transaction.commit();
session.close();
//2. load the same person
session = HibernateUtil.getSessionFactory().openSession();
transaction = session.getTransaction();
transaction.begin();
Person person2=session.get(Person.class, 1L);
transaction.commit();
session.close();
System.out.println(person2 == person);
它返回错误
二级缓存是这样的正常行为还是我错过了什么? 任何二级缓存引擎是否只保留同一实体的一个实例(与一级缓存一样)?
【问题讨论】:
-
看看here。我猜你的配置是错误的,但由于你没有发布,所以不可能告诉
-
我仍然不确定它应该如何工作,它似乎就像我在数据库中更改某些内容并尝试刷新实体一样工作,它返回缓存值而不是数据库中的真实修改值但是.. . 我可以像在我的例子中那样做吗 person2 as object == person (避免数据库中同一实体/行的多个实例)
标签: java database hibernate caching