0

我是hibernate的新手。我有一个对象的主键值,需要从数据库加载一个对象。我读到可以使用 get() 或 load() 或使用标准 API 加载对象。

我有点困惑在哪种情况下哪个更好用。有人可以指导我吗?

4

1 回答 1

1

Session.get()检查对象是否已经在会话中。如果是,则返回它。如果不是,它执行一个 select 语句来加载会话中对象的状态,并返回它。这是您应该默认使用的方法。

Session.load()检查对象是否已经在会话中。如果是,则返回它。如果不是,它会创建一个未初始化的代理并返回该代理。它甚至没有命中数据库。在代理上调用的第一个方法将使 Hibernate 从数据库中加载对象的状态,并初始化代理。当您只需要对现有对象的引用时,通常会使用此方法,例如初始化一对一关联。

条件查询或 HQL 查询将始终查询数据库。你不会用它来做同样的事情Session.get()。通过主键加载对象以及初始化关联会很有用,否则这些关联会使用Session.get(). 如果您知道您需要一个学生及其所有课程,最好在一个查询中加载所有内容,而不是在一个查询中加载学生,然后在第二个查询中加载课程。

于 2012-07-22T11:32:40.210 回答