我想澄清一些关于hibernate二级缓存的问题。需要澄清的一点是,HQL查询是否总是会击中数据库(至少对于获取id)。
假设我们有实体
class Customer {
long id; // Primary key
String name;
set <Address> addressList; // One to many relationship
}
class Address{
long id; // Primary key
String houseName;
}
地址的数据库表有一个对客户(id)的外键引用,以支持一对多关系。
作为前提条件,我已将hibernate的2级缓存启用为EHcache。只有实体和关联被设置为可缓存。未启用查询缓存。
我知道如果我使用这个会话。get()或会话。load()多次,只有第一次调用才会对数据库进行查询,随后的调用将从二级缓存中获取数据。
我的问题是
1)HQL会利用二级缓存吗?在一个会话中,我执行了一个HQL来使用主键(id)获取对象,“来自客户c,其中c.id = ? ").setParameter(1,1005)。
如果我在不同的会话中运行相同的HQL,客户对象是从2级缓存中获取还是再次访问数据库。
2)考虑从客户执行的另一个HQL作为c左连接获取c.address列表
用于选择客户和相关地址。
如果我在不同的会话中运行相同的HQL,关联的地址是从二级缓存中获取还是再次命中数据库。
由于您尚未启用查询缓存,任何实体查询(JPQL或Criteria API)都不会使用二级缓存。因此,这两个查询都将针对数据库执行。
如果希望这些查询改用二级缓存,可以启用查询缓存。
问题内容: 我想在hibernate项目中使用二级缓存,但是我只对hibernate二级缓存了解一点,任何人都可以解释我应该如何在代码中使用它以及需要什么配置和.jar文件吗?我将这些设置设置为我的hibernate.cfg.xml文件 并添加这些jar文件, 我想知道我是否需要更改其他配置? 我怎么知道我的项目使用二级缓存? 如果只是设置此设置,hibernate将自动使用此设置,否则我必须在我
问题内容: 我正在开发hibernate+ ehcache程序。 ehcache.xml 我在bean.xml中提到了ehcache 我在dao类中的调用方法是 输出为: 但是它在数据库中命中了两次。我在代码中没有发现任何错误。请向我建议为什么它在数据库中命中了两次。 问题答案: 我已经解决了我的问题。我需要添加 在域类中。
本文向大家介绍请简述一下Hibernate的一级缓存、二级缓存以及查询缓存分别是什么?相关面试题,主要包含被问及请简述一下Hibernate的一级缓存、二级缓存以及查询缓存分别是什么?时的应答技巧和注意事项,需要的朋友参考一下 考察点:缓存 参考回答: Hibernate的Session提供了一级缓存的功能,默认总是有效的,当应用程序保存持久化实体、修改持久化实体时,Session并不会立即把这种
我对hibernate中如何使用第一级和第二级缓存有一些了解。与此相关的问题很多-是的,我同意 但我的困惑是。在第一级缓存中,除非我提交事务,否则我的数据不会持久化到db中,因此其他会话在此之前不会知道这些更改。如果二级缓存将实体带到会话工厂级别!这是否意味着即使在我提交事务之前,我在一个会话中的更改也可以被其他会话使用?? 使用二级缓存时何时更新到dB??在第一次,它将在结束事务时发生 我引用了
我已经阅读了很多资料,但对于hibernate二级缓存,我无法消除一个疑问。 1) 比方说,我有一个返回1000条记录的查询。(例如,从年龄 2) 场景2。假设我执行查询(例如,从年龄
尝试使用infinispan作为Hibernate的二级缓存,但总是给我以下错误 org.infinispan.jmx.JMX MBean实例类型=CacheManager, name="DefaultCacheManager"已经在'org.infinispan'JMX域下注册。如果您想允许多个配置了相同JMX域的实例,请在org.infinispan.jmx.JmxUtil.buildJmxD