我是hibernate的新手。我有一个对象的主键值,需要从数据库加载一个对象。我读到可以使用 get() 或 load() 或使用标准 API 加载对象。
我有点困惑在哪种情况下哪个更好用。有人可以指导我吗?
Session.get()
检查对象是否已经在会话中。如果是,则返回它。如果不是,它执行一个 select 语句来加载会话中对象的状态,并返回它。这是您应该默认使用的方法。
Session.load()
检查对象是否已经在会话中。如果是,则返回它。如果不是,它会创建一个未初始化的代理并返回该代理。它甚至没有命中数据库。在代理上调用的第一个方法将使 Hibernate 从数据库中加载对象的状态,并初始化代理。当您只需要对现有对象的引用时,通常会使用此方法,例如初始化一对一关联。
条件查询或 HQL 查询将始终查询数据库。你不会用它来做同样的事情Session.get()
。通过主键加载对象以及初始化关联会很有用,否则这些关联会使用Session.get()
. 如果您知道您需要一个学生及其所有课程,最好在一个查询中加载所有内容,而不是在一个查询中加载学生,然后在第二个查询中加载课程。