我有一个带有命名查询的实体。
@Entity(name = "MyEntity")
@Table(name = "mytable")
//@ReadOnly
@NamedQueries({
@NamedQuery(
name = "exampleFind",
query = "[..]",
hints = {@QueryHint(name= QueryHints.QUERY_RESULTS_CACHE, value= "TRUE")})
})
@Cacheable
@Cache(type = CacheType.FULL)
public class MyEntity {
当我用@ReadOnly注释这个类时,这个查询没有命中数据库(仅使用结果缓存)但是当我删除@ReadOnly注释时,它总是在数据库上执行SQL。
如何在没有@ReadOnly的情况下启用此缓存?结果缓存有任何限制吗?
我使用EclipseLink 2.4.1
答案 0 :(得分:0)
在我们的应用程序中,我们在查询缓存也能正常运行时遇到了一些麻烦。您需要确保缓存实体和查询结果。
对我们来说,当我们将persistence.xml
中的共享缓存模式设置为DISABLE_SELECTIVE
时,它可以正常工作:
<shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode>
与此同时,我们使用@Cache
来配置我们想要的实体缓存类型。并@Cacheable(false)
为某些人禁用它。
根据developers manual此设置实际上是默认设置,因此删除当前设置也应该有效。