【发布时间】:2012-06-13 10:39:59
【问题描述】:
我有一个抽象 id 和 version 属性的 BaseEntity。这个类还实现了基于 PK (id) 属性的 hashcode 和 equals。
BaseEntity{
Long id;
Long version;
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
BaseEntity other = (BaseEntity) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
现在两个实体 A 和 B 扩展 BaseEntity 如下
A extends BaseEntity{
`B b`
B getB(){return b;)
void setB(B b){this.b=b;}
}
B extends BaseEntity{
}
object b1;
object a1;
a1.set(b1);
session.save(a1) //cascade save;
关闭会话 用惰性 b 加载 a 并尝试 a1.getB().equals(b1) 给出 false 但是如果我与 a1.getB().getId().equals(b1.getId()) 进行比较,那么真的很奇怪! 我认为这是因为 java 辅助代理对象,无论如何要解决这个问题?
【问题讨论】: