使用DataNucleus,我很高兴使用抽象基类为子类提供“长”ID(请注意原始类型)。DataNucleus是否可以坚持使用泛型参数化的抽象基类?
当适应example from JPA我有想法参数化基类。目的是支持不同的ID类型,如String。
@PersistenceCapable
@Inheritance(strategy=InheritanceStrategy.SUBCLASS_TABLE)
@Version(strategy=VersionStrategy.VERSION_NUMBER, column="jdo_version")
public abstract class VersionedIdEntity<P>
implements Serializable {
static final long serialVersionUID = 1L;
@PrimaryKey
@Persistent(valueStrategy=IdGeneratorStrategy.INCREMENT)
private P id;
public P getId() {
return id;
}
}
泛型让我用包裹Java类型“龙”,所以子类中声明是这样的:
public class Account extends VersionedIdEntity<Long>
我切换到新的基类引起的错误,指出没有实施'java.lang.Object'被找到。
org.datanucleus.exceptions.NucleusUserException:字段“VersionedIdEntity.id”被声明为引用类型(接口/对象),但“java.lang.Object中”没有实现类已经找到了!
错误是否与类型删除有关?
其他问题将是:(1)如何JPA的处理操作和(2)我是否可以限制键入P types persistable in DataNucleus,如:
<? extends PersistableType>
虽然我不能在其他地方找到帮助,问题之前可能会被问到。在这种情况下,一个简短的指针将不胜感激。
您列出的JPA示例与您正在尝试执行的操作不同。请注意,抽象类AbstractEntity不会声明** ID字段。这留给实现的子类。 – JamesB 2012-07-25 21:55:32
@JamesB:谢谢。你的回答是我正在寻找的解释。 – 2012-07-26 10:53:16