gpt4 book ai didi

java - HQL查询会不会使用Hibernate二级缓存

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:40 26 4
gpt4 key购买 nike

我想澄清一些关于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启用了二级缓存作为EHcache。只有实体和关联设置为可缓存。未启用查询缓存。

我知道如果我多次使用 session.get() 或 session.load() ,只有第一次调用会触发对数据库的查询,随后的调用会从二级缓存中获取数据。

我的问题是

1)HQL会不会利用二级缓存。在一个 session 中,我执行了一个 HQL 以使用主键 (id) 获取对象,“from Customer c where c.id = ?”).setParameter(1, 1005).

如果我在不同的 session 中运行相同的 HQL,Customer 对象是从 2 级缓存中获取还是会再次访问数据库。

2) 考虑另一个 HQL 执行 from Customer as c left join fetch c.addressList 以选择客户和相关地址。

如果我在不同的 session 中运行相同的 HQL,关联的地址是否会从 2 级缓存中获取,或者它会再次访问数据库。

最佳答案

因为你还没有启用 Query Cache ,没有实体查询(JPQL 或 Criteria API)将使用二级缓存。因此,这两个查询都将针对数据库执行。

如果您希望这些查询改为使用二级缓存,则可以启用查询缓存。

关于java - HQL查询会不会使用Hibernate二级缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24342174/

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