San*_*cko 3 java hibernate jpa hql second-level-cache
我想澄清一些有关休眠的二级缓存的要点。需要澄清的一点是,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;
}
Run Code Online (Sandbox Code Playgroud)
地址的数据库表具有对客户(id)的外键引用,以支持一对多关系。
前提是,我已将2级缓存启用为EHcache休眠。仅实体和关联设置为可缓存。没有启用查询缓存。
我知道,如果我多次使用session.get()或session.load(),则只有第一个调用才会向数据库发出查询,而随后的调用将从2级缓存中获取数据。
我的问题是
1)HQL是否会利用二级缓存。在一个会话中,我执行了一个HQL以使用主键(id)获取对象,“从Customer c,其中c.id =?”)。setParameter(1,1005)。
如果我在不同的会话中运行了相同的HQL,则将从2级缓存中获取Customer对象,否则它将再次访问数据库。
2)考虑执行另一个HQL,from Customer as c left join fetch c.addressList以选择客户和关联的地址。
如果我在不同的会话中运行了相同的HQL,则将从第二级缓存中获取关联的地址,否则它将再次命中数据库。
| 归档时间: |
|
| 查看次数: |
2751 次 |
| 最近记录: |