1

我有这样的实体模型(使用 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 类型的所有对象,它们在 Ba 字段上没有空引用。所有对象都被管理。例如,让Collection<A> aObjects, Collection<B> bObjects.

考虑到aObjects.get(0).equals(bObjects.get(0).a)a != null。我怎样才能确保这一点aObjects.get(0) == bObjects.get(0).a

我有相等/相同的对象,但我更喜欢相同的对象

4

1 回答 1

1

JPA 不是这样工作的。您从 JPA API 返回的实体实例是代表持久数据的“水合”容器。java 对象本身并不特殊,它们只是临时数据持有者。

从这个角度来看,对象身份并不重要,对象平等才是。

如果您的应用程序需要以这种方式进行对象标识,那么您将面临一场失败的战斗,因为 JPA 的设计初衷并非朝那个方向发展。

于 2010-03-09T22:40:25.053 回答