2012-03-21 70 views

回答

19

是的。

lazy属性告诉休眠何时得到孩子。

fetch属性告诉hibernate 如何得到子。

当你说

懒惰= true属性是让父母和孩子 收藏和同样的事情懒加载取=“选择”属性

是平掉不正确的。选择获取策略与关闭延迟加载不同。事实上,from the documentation

选择取:第二SELECT用来检索相关 实体或集合。除非您明确禁用指定lazy =“false”的延迟读取 ,否则只有在您访问关联的 时才会执行第二个选择。

+0

Thanks.I有另一个疑问,当我读取代理读取或“无代理”获取差异资源时,他们被称为单值关联。什么是hibernate中的单值关联? – user1127214 2012-03-21 13:28:55

12

当我们说fetch="select"时,即使它是lazy ="false",它总是会触发单独的查询来检索关联对象。

但是,当我们说lazy ="true"时,这意味着它将检索单独查询中的关联对象,但不是在加载对象时,而是在第一次访问关联时。我们可以说list().size()

当我们说fetch="join"时,它将始终触发单个查询以从数据库获取关联对象。

0

为了解决n个查询(父子关系)在hibernate中的n + 1选择问题,我们使用fetch =“join”而不是fetch =“select”。延迟设置决定是否在加载父对象时加载子对象。您需要执行此操作来设置父类的相应Hibernate映射文件.Lazy = true(表示不加载子对象)默认情况下,子对象的延迟加载为true 。

相关问题