2012-07-25 71 views
1

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

雖然我不能在其他地方找到幫助,問題之前可能會被問到。在這種情況下,一個簡短的指針將不勝感激。

+1

您列出的JPA示例與您正在嘗試執行的操作不同。請注意,抽象類AbstractEntity不會聲明** ID字段。這留給實現的子類。 – JamesB 2012-07-25 21:55:32

+0

@JamesB:謝謝。你的回答是我正在尋找的解釋。 – 2012-07-26 10:53:16

回答

2

你是說JDO定義了一個實現應該支持這個嗎?答:不。 JDO定義了有效的PK類型,什麼是「P」?就類而言,它是Object(即(java.lang。)Object,因爲它沒有實際的類型)。 JPA也沒有爲此定義它。

+2

我只是一個試圖瞭解持久性的新手。我會將你的回答作爲對我關於類型刪除的問題的回答。謝謝。如果您參與了@DataNucleus項目,還要感謝您提供的這個優秀的持久性平臺和您的可用性,以回答有關它的問題。這是一個令人生畏的對話(聲望爲6,聲望爲7,130)。 – 2012-07-26 11:00:57

+0

我懷疑這也適用於JPA,對不對? – 2016-06-21 12:33:38

相關問題