遇到一个问题,例如:
[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的时候不去抓取么?
谢谢
既然你重写了equals方法,就不能不去抓取。
[code="java"]
if ( !overridesEquals && "equals".equals(methodName) ) {
return args[0]==proxy ? Boolean.TRUE : Boolean.FALSE;
}
[/code]
除非你不重写这个方法
在展示的页面上才使用对象吧
使用opensessionview这个filter就可以了,注意filter的顺序
延迟还是有好处的,不需要改