我已经为EHCache配置了defaultCache(用于元素),StandardQueryCache(用于查询)和UpdateTimestampsCache(我认为是为了跟踪数据库更新……但我实际上并没有真正地了解它的功能)。
我已经为每个缓存设置了maxElementsInMemory,但是我没有得到的是这个数字控制StandardQueryCache和UpdateTimestampsCache的内容。我知道可以在默认缓存中缓存的实体数不能超过10000,但是查询缓存不缓存元素。它缓存主键(据我了解)。
这是否意味着StandardQueryCache的maxElementsInMemory控制结果中“行”的数量,还是控制它可能具有的元素的主键对的数量?
那么UpdateTimestampsCache呢?它是否跟踪实体的最后一次更新,表的最后一次更新…或其他?我应该为maxElementsInMemory使用哪个数字?
谢谢!
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true">
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600">
</defaultCache>
<cache
name="org.hibernate.cache.internal.StandardQueryCache"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600">
</cache>
<cache
name="org.hibernate.cache.spi.UpdateTimestampsCache"
maxElementsInMemory="10000"
eternal="true">
</cache>
</ehcache>
对于查询缓存,每个查询结果的结果是StandardQueryCache区域中的一个条目。因此,您的缓存目前已设置为在默认/未命名区域中缓存10000个不同的查询结果。设置为使用命名区域(Query#setCacheRegion)的查询将写入其他缓存区域。
每当基础数据发生更改时,这些结果都需要“无效”。这就是UpdateTimestampsCache的目的。当Hibernate写入表时,它将进入UpdateTimestampsCache中(此过程仅在启用查询缓存时启用,因为它明确是使这些缓存的查询结果无效的一部分)。当读回缓存的查询结果时,我们将查询结果所缓存的时间戳与其用于确定结果是否仍然有效的所有表的时间戳进行对照。如果可能的话,最好不要限制该区域。如果需要,最好的数目是基础域模型中的表数。否则,缓存的查询结果可能会在不必要时开始变得无效。很难想象您有10000个表,所以在那里可能还不错。
问题内容: DISTINCT在JPA中使用哪一列,并且可以更改它? 这是使用DISTINCT的示例JPA查询: 哪一个没有多大意义-区别基于哪个列?是否在Entity上将其指定为注释,因为我找不到注释? 我想指定要区分的列,例如: 我正在使用MySQL和Hibernate。 问题答案: 更新:请参阅投票最多的答案。 我自己的已经过时了。 仅出于历史原因保留在这里。 在Joins中通常需要在HQL中
本文向大家介绍hibernate 是如何工作的?相关面试题,主要包含被问及hibernate 是如何工作的?时的应答技巧和注意事项,需要的朋友参考一下 读取并解析配置文件。 读取并解析映射文件,创建 SessionFactory。 打开 Session。 创建事务。 进行持久化操作。 提交事务。 关闭 Session。 关闭 SessionFactory。
问题内容: 我提到了许多文章,但仍然不清楚hibernate状态下的性能。 根据我到目前为止遇到的是,当我们使用批量保存/更新时,如下所示: 用于刷新会话强制Hibernate将Session的内存中状态与数据库同步。 题 1. 刷新会话后,为什么需要这样做?真的需要吗? 2. 会执行提交动作吗? 3. 如果逐出所有已加载的对象,则在执行提交和回滚操作时内部会发生什么? 问题答案: 可以将会话视为
问题内容: 我正在使用带有Hibernate的MS SQL Server 2008。我的问题是Hibernate如何实现 采取以下简单方案。 如果我有一个返回100行的查询,并且如果我将1传递给,这会影响SQL Server本身返回的结果(就像运行一条语句一样),还是Hibernate首先获取所有结果(在这种情况下为所有100行)并挑选最高的自己? 我问的原因是,当行数开始增加时,它将出现巨大的性
在我加入的新项目中,他们一直交替使用术语Hibernate和JPA。所以,我试图深入研究代码并试图理解整个事情是如何工作的(我是Spring、JPA和Hibernate世界的新手)。我将尝试将代码放在这里以更好地理解:1)有一个@Configuration类,其中有以下内容: 因此,在这个配置类中,我们返回一个EntityManagerFactory。 2) 然后是一个标记为@persistor的
我从网上和论坛上看到了关于BatchSize的相关主题,但我仍然不明白一些部分。所以让我们描述一下我理解的和不理解的。 批量取数:选择取数的优化策略。Hibernate通过指定主键或外键列表,在一次选择中检索一批实体实例或集合。 让我们有JPA 2.0,带有Hibernate实现。这些实体: } 因此,我懒得去了解产品中的制造商。因此,当我执行select fetching时,就完成了。所以我有很