java - JPA 中的相同对象

标签 java jpa entity eclipselink

我有这样的实体模型(使用 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/

相关文章:

java - 如何处理spring-security-oauth2的版本升级?

java - 我是否在组合键中正确定义了多对一?

java - 如何在 Hibernate 中内连接两个独立实体

entity-framework - 如何在 EF4 中获取实体的第一个 EntityKey 名称

java - 使用比较器 "offtopic"是不好的 java 风格吗?

java - 通过 Twilio 调用电话时如何设置自己的 URL?

sql - 具有复合主键查询的 JPA COUNT 不起作用

java - cron 任务运行时“锁定”数据存储访问

java - 我们可以将实体转换为 dto/pojo 对象吗?

java - 使用 IText 解析 PDF 文件以在现有文本中添加超链接