假设我有以下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属性。在这种情况下,扩展无效。
答案 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;
}
}
我无法测试,如果它不起作用,请告诉我,以便删除答案。