gpt4 book ai didi

java - 为什么 hibernate 从同一 session 的同一查询返回不同的对象?

转载 作者:行者123 更新时间:2023-11-30 04:25:55 25 4
gpt4 key购买 nike

我正在使用 hibernate 运行命名 JPA 查询。

查询从同一 session 执行两次,查询应返回相同的行,因为数据库同时不会更改。

令我惊讶的是,查询返回的对象与这两个查询结果列表不同(数据相同但对象不同)。启用一级缓存(默认情况下)后,我认为第二个查询应该返回与第一个查询相同的对象?

该查询是一个简单的命名查询:

SELECT e from TABLE e where e.name=?1 

查询是否以某种方式绕过了缓存?还是我对一级缓存的理解有误?

最佳答案

这些结果很大程度上取决于您是否为对象提供实体 ID。

此外, session 缓存和查询缓存在 Hibernate 中是两个不同的东西。

如果您从同一 session 加载具有相同实体 ID 的对象,它将返回相同的对象。

但是如果您使用查询来加载对象 - 情况就不同了。无论您拥有什么实体 ID,使用查询缓存都应该返回相同的数据。

默认情况下,查询缓存未打开。您必须执行类似 query.setCacheable(true); 的操作来确保缓存查询。或者在 Hibernate 配置文件中设置 hibernate.cache.use_query_cache 属性。

关于java - 为什么 hibernate 从同一 session 的同一查询返回不同的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15868926/

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