内连接和内连接提取有什么区别? ,HQL

时间:2014-02-03 17:14:37

标签: hibernate hql

我对HQL查询

有疑问
"SELECT c from Account c inner join c.person " 
"SELECT c from Account c inner join fetch c.person"

等于吗?...当我可以使用fetch

提前致谢。

3 个答案:

答案 0 :(得分:4)

获取连接允许急切地加载集合,当您有涉及集合的关系时,通常会使用它。这是一种热切检索所有记录的方法,以避免在会话关闭或将对象移动到视图时出现任何问题。

FETCH JOINs

答案 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,以更好地理解。