Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:是否可以手动将对象添加到二级缓存?_Java_Hibernate_Caching_Jpa_Second Level Cache - Fatal编程技术网

Java Hibernate:是否可以手动将对象添加到二级缓存?

Java Hibernate:是否可以手动将对象添加到二级缓存?,java,hibernate,caching,jpa,second-level-cache,Java,Hibernate,Caching,Jpa,Second Level Cache,在我的项目中,我想缓存几个对象,但不是整个表。所以我的问题是,是否有一个API可以用来手动将对象添加到hibernate二级缓存?(或者有没有办法为二级缓存指定表数据区域?您可以使用要缓存的实体进行注释 @Cacheable(true) @Entity public class Person { ... } 然后在persistence.xml配置文件中,您需要设置共享缓存模式元素以使用: 现在,您必须启用二级缓存: <prop key="hibernate.cache.use_seco

在我的项目中,我想缓存几个对象,但不是整个表。所以我的问题是,是否有一个API可以用来手动将对象添加到hibernate二级缓存?(或者有没有办法为二级缓存指定表数据区域?

您可以使用要缓存的实体进行注释

@Cacheable(true)
@Entity
public class Person { ... }
然后在persistence.xml配置文件中,您需要设置
共享缓存模式
元素以使用:

现在,您必须启用二级缓存:

<prop key="hibernate.cache.use_second_level_cache">true</prop>
<property name="hibernate.cache.region.factory_class">ehcache</property>

我想不出你为什么要这么做。这不是你的缓存,你为什么要把它搞砸呢。jpa将只缓存使用的对象(检索/保存到db…),因此您可以将其留给Hybernate来完成其工作(不过,您可以配置其大小)。如果你需要自己的缓存,只需使用番石榴缓存即可。这很有帮助。但是我只想缓存一些
Person
对象。原因是有两个多人,缓存所有这些人可能是一个问题(内存和应用程序启动时所有对象都被缓存)。因此,我只希望缓存具有特定条件(例如:年龄>50)的人员,这些人员应在应用程序启动时加载。如果运行该查询,则只缓存您选择的实体,而不会缓存数据库中的整个实体。这就是二级缓存的工作原理。是的。但最终,大数据集将在缓存中(当数据被读取时)。是否有一种方法可以控制应该使用上述条件永久缓存的对象。(对于不希望存储在缓存中的所有实体,可以调用
entityManager.execit(entity)
@Cacheable(true)
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE, region="your-entity-region")
@Entity
public class Person { ... }
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<property name="hibernate.cache.region.factory_class">ehcache</property>
Person person = entityManager.find(Person.class, 1L);