使用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