17 votes

Pourquoi JPA exige-t-il un constructeur sans argument pour les objets de domaine ?

Pourquoi JPA exige-t-il un constructeur sans argument pour les objets de domaine ? J'utilise eclipselink et je viens de recevoir cette exception pendant le déploiement.

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)])

19voto

Bozho Points 273663

En effet, il arrive souvent que le fournisseur JPA doive instancier votre objet de domaine de manière dynamique. Il ne peut pas le faire, à moins qu'il y ait un constructeur sans argument - il ne peut pas deviner quels devraient être les arguments.

10voto

José Andias Points 173

Remarquez aussi que c'est no dépendant du fournisseur. Il s'agit d'une spécification JPA.

JPA v2.0 JSR-317 et v2.1 JSR-338 dit :

La classe d'entité doit avoir un constructeur sans argument. La classe d'entité peut également avoir d'autres constructeurs. Le constructeur no-arg doit être public ou protégé. .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X