gpt4 book ai didi

hibernate - 如何在 hibernate 中使用二级实体缓存来缓存整个表。?

转载 作者:行者123 更新时间:2023-12-04 17:21:35 25 4
gpt4 key购买 nike

一个多月以来,我一直在为解决这个问题而苦苦思索。请帮助..

我想在 hibernate 中为几个主表做二级实体缓存(使用 EHcache)。我关注了 http://ehcache.org/documentation/2.7/integrations/hibernate和其他一些链接,并按如下方式进行配置:

对于cfg文件

    <!-- For Second Level Caching -->

<property name="hibernate.dialect">org.hibernate.dialect.DB2Dialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.use_query_cache">false</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<property name = "net.sf.ehcache.configurationResourceName">/ehcache.xml</property>

<!-- For statistics -->

<property name="hibernate.generate_statistics">true</property>
<property name="hibernate.cache.use_structured_entries">true</property>
<property name = "net.sf.hibernate.cache.UpdateTimestampsCache ">true</property>

hbm 文件。

    <hibernate-mapping>
<class name="com.example.ehcacheSample.stateMstr" table="STATE_MSTR">

<cache include="all" usage="read-only" region = "stateMstr"/>

...........
</class>
</hibernate-mapping>

ehcache.xml

    <cache name = "stateMstr"
maxElementsInMemory="1"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
overflowToDisk= "true" />

现在我有一些问题

  • 文档说对于二级缓存,只需要使用主键加载实体。这意味着要在缓存中获取 100 行的表,我们必须使用列的主键作为可序列化 ID 运行循环 100 次。换句话说,如果我想在缓存中创建表的副本,逐行加载实体是唯一的选择吗??

  • 其次,如果我们想使用缓存中同一行的任何列的给定值来获取行的主 ID,是否可以在不访问数据库查询的情况下实现?例如,如果 deptt 名称已知并且我想获取 deptt 的 id 并且 deptt 表被缓存.. 是否可以在不点击数据库查询的情况下获取 id。

最佳答案

我有一些像你一样的问题

首先,如果要加载表的所有行,可以使用查询缓存(将 hibernate 配置更改为 true)

<property name="hibernate.cache.use_query_cache">true</property>

在您的查询中,您必须使用 setCacheable(true) 方法来告诉 hibernate 保存查询结果。

session.createQuery("from deptt").setCacheable(true);

现在你有一个查询和查询的结果在你的查询缓存中(结果是你的德普列表(所有表)),

如果你想使用这个列表,你必须使用相同的查询来再次获取你的 Depp 的列表,而无需访问数据库。

session.createQuery("from deptt").setCacheable(true);

你把结果放入一个集合、列表……如果你想得到一个德普,你可以从你拥有的德普列表中得到它。

关于hibernate - 如何在 hibernate 中使用二级实体缓存来缓存整个表。?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28717848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com