【发布时间】:2016-01-18 01:21:34
【问题描述】:
我读到getOne() 是延迟加载的,findOne() 会立即获取整个实体。我检查了调试日志,甚至在我的 sql 服务器上启用了监视以查看执行了哪些语句,我发现 getOne() 和 findOne() 都生成并执行相同的查询。但是,当我使用getOne() 时,这些值最初为空(当然,id 除外)。
那么谁能告诉我,如果这两种方法都在数据库上执行相同的查询,我为什么要使用一种而不是另一种呢?我基本上是在寻找一种在不获取其所有子项/属性的情况下获取实体的方法。
EDIT1:
道码:
@Repository
public interface FlightDao extends JpaRepository<Flight, Long> {
}
Debugging log findOne() vs getOne()
EDIT2:
感谢 Chlebik,我能够确定问题所在。正如 Chlebik 所说,如果您尝试访问由getOne() 获取的实体的任何属性,则将执行完整的查询。在我的情况下,我在调试时检查行为,一次移动一行,我完全忘记了在调试时 IDE 尝试访问对象属性以进行调试(或者至少这是我认为正在发生的事情),所以调试触发器完整的查询执行。我停止调试,然后检查日志,一切正常。
getOne() vs findOne()(此日志取自 MySQL general_log 而不是休眠。
【问题讨论】:
标签: spring hibernate jpa spring-data-jpa