我有这样的实体模型(使用EclipseLink和JPA 2.0):
@Entity
class A {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
//equals, hashCode autogenerated by nb.
}
和
@Entity
class B {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
@ManyToOne
A a;
//equals, hashCode autogenerated by nb.
}
我查询所有类型为A的对象,以及类型为B的所有对象,这些对象在B.a字段上没有空引用。管理所有对象。例如,我们来Collection<A> aObjects, Collection<B> bObjects
。
考虑aObjects.get(0).equals(bObjects.get(0).a)
和a != null
。如何确保aObjects.get(0) == bObjects.get(0).a
?
我有相同/相同的对象,但我更喜欢相同的对象。
答案 0 :(得分:1)
JPA无法正常工作。您从JPA API返回的实体实例是表示持久数据的“水合”容器。 java对象本身并不特殊,它们只是瞬态数据持有者。
从这个角度来看,对象身份并不重要,对象平等就是。
如果您的应用程序需要以这种方式识别对象,那么您将打败一场失败的战斗,因为JPA并不是为了向这个方向弯曲。