我假装挺狠
2011-12-25 19:08
浏览 241
已采纳

关于Hibernate延迟加载的问题

遇到一个问题,例如:
[code="java"]
public Class Parent{
private String id;
//other fields
...
public Parent(){}
//setters & getters
...
public boolean equals(Object o){
//核心是判断两个对象的id是否一样
....
}
}

public Class Child{
private String id;
private Parent parent;
//other fields
...
public Child(){}
//getters & setters
...
}
[/code]
在Hibernate中配置Child中关联Parent,而且是延迟加载,查询from Child where ... 之后,session关闭,这时调用 Child的getParent().getId()不会去取抓取Parent对象,但是调用Child的getParent().equals(anotherParent)后就需要抓取对象,然后报错could not initialize proxy - no Session,异常中有一句:
at com.td.model.Parent_$$_javassist_1.equals(Parent_$$_javassist_1.java)
为啥equals的时候要抓取?有办法让调用equals的时候不去抓取么?

谢谢

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • tianshilang 2011-12-26 11:36
    已采纳

    既然你重写了equals方法,就不能不去抓取。

    [code="java"]
    if ( !overridesEquals && "equals".equals(methodName) ) {
    return args[0]==proxy ? Boolean.TRUE : Boolean.FALSE;
    }
    [/code]

    除非你不重写这个方法

    打赏 评论
  • ll89308839 2011-12-26 09:07

    在展示的页面上才使用对象吧
    使用opensessionview这个filter就可以了,注意filter的顺序
    延迟还是有好处的,不需要改

    打赏 评论

相关推荐 更多相似问题