我有这样的实体模型(使用 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
?
我有相等/相同的对象,但我更喜欢相同的对象。
最佳答案
JPA 不是这样工作的。从 JPA API 返回的实体实例是代表持久数据的“水合”容器。 java 对象本身并不特殊,它们只是暂时的数据持有者。
从这个角度来看,对象身份并不重要,对象平等才重要。
如果您的应用程序需要以这种方式进行对象标识,那么您将面临一场失败的战斗,因为 JPA 的设计并不是为了向这个方向弯曲。
关于java - JPA 中的相同对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2412701/