Hibernate将缓存的实体存储为CachedEntry类的实例,这意味着每次从二级缓存请求实体时,都会从CachedEntry中包含的数据创建该实体的新实例。
在大多数情况下,这是一种很好的方法,因为它防止缓存的数据被请求实体的代码意外地修改。但是,当存储的实体不可变时,这是不可能发生的。
我们有一堆包含相当大数据的实体对象(有很多属性),一旦写入,它们就永远不会改变,因此实体对象是不可变的。
是否有一种方法强制Hibernate将不可变对象存储为“实际实例”,这意味着对于每个不同的实体,缓存中只存在一个不变的实例,这些实例将始终被返回,而不是一直创建新实例?
我希望Hibernate会有带有@Immutable注释的对象的这种行为,但事实并非如此。
发布于 2015-05-15 20:24:48
也不可能在Hibernate中对不可变的对象(实体)执行此操作,原因很多,主要涉及关联:
这些是我第一次想到的原因,而且可能还有许多其他的障碍会使Hibernate很难实现这一点。
您可以在这个博客中找到更多关于Hibernate二级缓存的信息,当然也可以在官方文档中找到更多信息。
https://stackoverflow.com/questions/30266580
复制相似问题