解决方案 »

  1.   

    补充一下,就是我最终要实现的是:查询IdCard时候,不会连带Person也查询出来。
      

  2.   

    加上 cascade=CascadeType.ALL 呢?再不行你用这个例子试一下,感觉你这样应该已经做到lazy了
    http://stackoverflow.com/questions/17987638/hibernate-one-to-one-lazy-loading-optional-false
      

  3.   

    楼主你最好看看JPA的解释,你OneToOne注解里虽然有lazy但你的optional=false这里就告诉了JPA不允许非null对象的存在也就是说在查询的时候必须要有一个关联对象,这样延迟初始化自然就无效了。默认optional=true他是允许null对象的。
      

  4.   

    你好,如果是根据主键查询主控方Person,懒加载是有效的,但是查询受控方IdCard,除了查询了IdCard还会把Person给查询出来,所以IdCard中@OneToOne注解设置了fetch=FetchType.LAZY是失效的。不过,如果是采用共享主键的方式确实可以实现我想要的结果,但是我不明白为什么外键关联这种方式反而不行,而且现在我的项目中是采用这种外键关联的比较多,如果要改成共享主键的方式的话数据库变动很大。
      

  5.   

    非常谢谢你的回复,不过我是这样理解的:Hibernate是基于动态代理机制的,如果我设置optional为false,那就是告诉Hibernate这个属性不能为空,Hibernate就会给这个对象设置一个代理,这样就不会到数据库里查询Person的对应信息,只会存储Person对应的Id而已。如果按照您说的,那就是说如果optional=true就可以咯,不过我试了一下还是不可以!
      

  6.   

    把optional去掉,在把你的cascade里面的CascadeType.PERSIST去掉这个级联会在你查询的对象持久化时级联持久化关联的对象也就不会懒加载了
      

  7.   

    这样吧,我把那个测试的项目放到网盘上,大家帮我看一下,先谢谢各位了。这是网盘地址:http://pan.baidu.com/s/11kyKc
      

  8.   

    这样吧,我把那个测试的项目放到网盘上,大家帮我看一下,先谢谢各位了。这是网盘地址:http://pan.baidu.com/s/11kyKc