当前位置: 首页 > 面试题库 >

为什么延迟加载无法在一对一关联中工作?

齐健柏
2023-03-14
问题内容
@Entity
public class Person {
    @Id
    @GeneratedValue
    private int personId;

    @OneToOne(cascade=CascadeType.ALL, mappedBy="person", fetch=FetchType.LAZY)
    private PersonDetail personDetail;

    //getters and setters
}

@Entity
public class PersonDetail {
    @Id
    @GeneratedValue
    private int personDetailId;

    @OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
    private Person person;

        //getters and setters

    }

当我做

 Person person1=(Person)session.get(Person.class, 1);

我看到两个查询被解雇了。一个用于获取人员数据,另一个用于人员详细数据。

根据我的理解,应该仅触发1个查询来获取人数据而不是人详细数据,因为我已经提到了延迟加载。为什么personDetail数据与person数据一起获取?


问题答案:

Hibernate无法像代理@ToMany关系中的Sets / Lists一样代理自己的对象,因此延迟加载不起作用。

我认为此链接可能有助于理解您的问题:http : //justonjava.blogspot.co.uk/2010/09/lazy-one-to-
one-and-one-to-many.html



 类似资料:
  • 我面临的问题是一对一的惰性加载在Hibernate中不起作用。我已经解决了,但还是不明白会发生什么。 我的代码(懒惰加载在这里不起作用,当我拉person-address也被提取): 但是:如果我在OneToOne关系中添加,那么惰性加载工作很好! 问题/恳求:请给我解释一下注释如何帮助实现延迟加载。 附注。我看过post1和post2,明白了为什么简单的OneToOne不能偷懒,但我还是不能掌握

  • 问题内容: 我遇到了 一个 问题,即 一对一的延迟加载 在hibernate状态下不起作用。我 已经解决了它 ,但仍然 无法 正确 理解 会发生什么。 我的代码( 延迟加载在这里不起作用 ,当我拉人时-地址也被获取): 但是 :如果我添加 OneToOne关系,则延迟加载 效果很好 ! 问题/完整性: 请向我解释注释如何帮助实现延迟加载。 PS 我已经阅读了post1和post2的帖子,并了解了为

  • 问题内容: 什么是Java的延迟加载?我不明白这个过程。有人可以帮助我了解延迟加载的过程吗? 问题答案: 假设您有一个父母,而那个父母有很多孩子。Hibernate现在可以“延迟加载”子级,这意味着它在加载父级时实际上并不会加载所有子级。而是在要求时加载它们。您可以显式地请求此请求,或者,更常见的是,当您尝试访问孩子时,hibernate会自动加载它们。 延迟加载可以帮助显着提高性能,因为通常您不

  • 问题内容: Java中的延迟加载是什么?我不明白这个过程。有人可以帮助我了解延迟加载的过程吗? 问题答案: 假设你有一个父母,而那个父母有很多孩子。Hibernate现在可以“延迟加载”子级,这意味着在加载父级时,它实际上并未加载所有子级。而是在要求时加载它们。你可以显式地请求此请求,也可以是更常见的情况,当你尝试访问孩子时,hibernate会自动加载它们。 延迟加载可以帮助显着提高性能,因为通

  • 当执行session . create query(" from Author ")时。list();即使关系被标记为optional=false,fetch type = lazy from Author- Hibernate:选择author0_。作者ID为作者I1 0,作者0。电子邮件为email2_0_,author0_。名为name3_0_ from AUTHOR author0_ Hi

  • 本文向大家介绍关于延迟加载JavaScript,包括了关于延迟加载JavaScript的使用技巧和注意事项,需要的朋友参考一下 JavaScript的延迟加载是那些在web上,能让你想抓狂地去寻找解决方案的问题之一。 很多人说“那就用defer”或“async”,甚至有些人说“那就将你的javascript代码放在页面代码底部”。 上述方法都不能解决在web页面完全加载后,再加载外部js的问题。上