我对HQL
查询
"SELECT c from Account c inner join c.person "
"SELECT c from Account c inner join fetch c.person"
等于吗?...当我可以使用fetch
?
提前致谢。
答案 0 :(得分:4)
获取连接允许急切地加载集合,当您有涉及集合的关系时,通常会使用它。这是一种热切检索所有记录的方法,以避免在会话关闭或将对象移动到视图时出现任何问题。
答案 1 :(得分:3)
Koitoer所提到的是正确的
此外 在您的帐户中,人员通常设置为懒惰加载,即使您在HQL中加入,收集人员可能无法加载,您必须使用“获取”加载它们。
答案 2 :(得分:1)
注意:假设某人是您帐户类中的一个对象
“从帐户acc内部加入acc.person中选择acc”
在这种情况下,Hibernate将向您返回所有确实与 person 相关联的 Account 对象(即 acc.person 不为null)。
但是,如果您的用例要求您稍后在代码中进行 acc.getPerson(),则然后Hibernate将在内部运行另一个查询以获取Person对象。与acc相关联[提供的会话仍处于打开状态。]
因此,为了保存该附加查询,最好使用
“从帐户acc内部联接提取acc.person中的SELECT acc”
当您知道以后需要使用关联的对象(在这种情况下为Person对象)时。
也请参考答案in here,以更好地理解。