philips114
2010-01-19 15:01
浏览 276
已采纳

关于Hibernate一对一双向关联 延迟加载问题

 各位大哥大姐,小弟在做Hibernate一对一双向关联时,始终不能实现延迟加载,在网上寻找了N多办法都不发实现。
 一对一主键双向关联时,网上说的办法是将<one-to-one>标签中设置constrained="true",但是在进行查找时,如果从表为NULL,用getXXXX()!=NULL判断会出现异常。
 一对一外键双向关联时,不管自己怎样设置都不能实现延迟加载。
 望提供Demo,并给详细解释,小弟在此谢谢了!
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • cys202013 2010-01-22 15:06
    已采纳

    当然能呀 异常都是人为的 既然你都能把它弄出来那当然也能避免呀
    你就不要做关联查询就行了嘛 你都知道是一对一映射 又不想要那个异常 那就拿你主表的ID去子表是否有这一条记录

    点赞 评论
  • cys202013 2010-01-19 16:12

    Person.hbm.xml:
    [code="java"]

    id


    [/code]
    Class.hbm.xml
    [code="java"]

    [/code]

    点赞 评论
  • 临远 2010-01-19 16:14

    hibernate里的one to one是不支持延迟加载的。

    作者Gavin King对这个问题表现出极其强硬的态度,死也不支持这个特性。

    点赞 评论
  • soilder 2010-01-19 17:19

    在属性中加入lazy=true,试一试

    点赞 评论
  • cys202013 2010-01-20 14:28

    这个配置如果你从Person去找Class就有延迟加载而如果你从Class去找Person Hibernate就会用外联接去两表关联查询 不会做延迟加载

    点赞 评论
  • cys202013 2010-01-21 09:05

    你想用到延迟加载是不是你知道主表的一条记录对应的子表没有而通过延迟加载不去取子表的记录 从而达到不报错???
    Person.hbm.xml
    [code="java"]


    id




    [/code]

    Class.hbm.xml
    [code="java"]
    unique="true">

    [/code]
    用这种就可以两方都能延迟加载

    点赞 评论
  • cys202013 2010-01-21 11:58

    这种情况你只要捕捉一下异常就行了嘛 当没有记录时他会抛出异常

    [code="java"]
    boolean isexsit = false;
    Person p = Factory.getInstance().viewPerson(session, "3");
    System.out.println(p.getName());
    try {
    System.out.println(null == p.getClasses().getDscr());
    isexsit = true;
    } catch (Exception e) {
    System.out.println("没有找到该条记录");
    }
    [/code]

    点赞 评论

相关推荐 更多相似问题