【发布时间】:2014-11-07 17:46:02
【问题描述】:
我想知道如果我更改从 Hibernates 二级缓存中检索到的 DOM 对象的属性会发生什么。我找到了这句话:
二级缓存存储实体 ID 到其他属性的映射(它实际上并不存储对象,而是数据本身)
在这个答案中:https://stackoverflow.com/a/7059822/2468620。
这应该意味着当我从二级缓存中检索一个实体时,它是从存储的原始数据“新”创建的。因此,如果我更改此实体的属性,它不应该影响存储在二级缓存中的数据。这意味着当我在另一个会话中再次检索实体时,其属性不应受到所描述的更改的影响。
例如:
user = userDao.find(1); // get user stored in second level cache
System.out.println(user.getName()); // returns "originalName"
user.setName("modifiedName");
// === this is done in a different session ===
user = userDao.find(1);
System.out.println(user.getName()); // should return "originalName"
我用 eh-cahce 尝试了上面的例子,它确实有效,但我的问题是:
这种行为是否得到保证?我的意思是即使我更改了缓存提供程序,或者当我使用的缓存提供程序的实现发生更改时,我是否可以依赖它?我查看了 JPA 规范并没有找到这方面的信息。
【问题讨论】:
标签: java hibernate caching orm immutability