坚持没有身份证的第三方课程

时间:2013-11-30 07:39:40

标签: java jpa orm jpa-2.0

假设我有以下Java类,它由供应商拥有,因此我无法更改它:

public class Entry {
    private String user;
    private String city;

    // ...
    // About 10 other fields
    // ...

    // Getters, setters, etc.
}

我想使用JPA 2.0(OpenJPA实现)将其持久化到表中。我不能注释这个类(因为它不是我的),所以我使用orm.xml来做这个。

我正在创建一个包含每个字段列的表,以及另一个名为ID的列。然后,我正在为它创建一个序列。

我的问题是:是否可以告诉JPA我想要用于此实体的ID甚至不作为Entry类中的成员属性存在?我如何创建一个允许我持久保存此类实例的JPA实体?

修改

我知道扩展类并添加ID属性的策略。但是,我正在寻找一个不涉及扩展这个类的解决方案,因为我需要这个解决方案也适用于不仅我必须坚持的一个类,而是一个相互关联的类的集合 - 无其中有任何ID属性。在这种情况下,扩展无效。

2 个答案:

答案 0 :(得分:1)

最终,我最终做了以下事情:

public class EntryWrapper {
    @Id
    private long id;

    @Embedded
    private Entry entry;
}

所以,我确实包装了实体,但与建议的方式不同。由于Entry类是供应商提供的,我在orm.xml文件中完成了所有ORM工作。坚持不懈时,我坚持EntryWrapper

答案 1 :(得分:0)

我对JPA没有多少经验,但我不会扩展你的基类,而是将它们包装起来:

public class PersistMe<T> {

  @Id
  private long id;

  private T objToWrap;

  public(T objToWrap) {
    this.objToWrap = objToWrap;
  }
}

我无法测试,如果它不起作用,请告诉我,以便删除答案。