2010-05-11 67 views
6

爲什麼JPA需要域對象的無參數構造函數? 我正在使用eclipselink,並在部署過程中剛剛得到此異常。爲什麼JPA需要域對象的無參數構造函數?

Exception [EclipseLink-63] (Eclipse Persistence Services-1.1.0.r3639-SNAPSHOT): 
org.eclipse.persistence.exceptions.DescriptorException 

Exception Description: The instance creation method 
[com.me.model.UserVO.<Default Constructor>], with no parameters, 
    does not exist, or is not accessible. 
Internal Exception: java.lang.NoSuchMethodException: 
    com.me.model.UserVO.<init>() 
Descriptor: RelationalDescriptor(com.me.model.UserVO --> 
    [DatabaseTable(user)]) 

回答

9

因爲經常發生JPA提供程序必須動態實例化您的域對象。它不能這樣做,除非有一個沒有參數的構造函數 - 它不能猜測參數應該是什麼。

+0

這是否也意味着無參數構造函數可能會在持久化實體(例如實體管理器最初加載實體時)後被調用。在這種情況下,我們不應該在構造函數中初始化任何字段或做其他工作,對嗎? – Theo 2011-04-28 13:49:09

+0

@Theo - 是的,構造函數在加載實體時調用。 – Bozho 2011-04-28 13:55:13

3

另請注意,這是而不是提供程序依賴。這是一個JPA規範。

JPA 2.0 JSR-317和V2.1 JSR-338說:

實體類必須有一個無參數的構造函數。實體類也可以有其他構造函數。 無參數構造函數必須是公共的或受保護的

相關問題