Bonjour
je veux faire qq chose qui correspond au cas d'école suivant:
J'ai une classe Person (nom, prenom, adresse).
En fonction de son Pays, l'adresse a des propriétés différentes (il y a plus ou moins de champs, elle ne s'écrit pas de la même manière sur les lettres).
J'ai donc une classe AbstractAddress (rue, ville, pays, codePostal, abstract description(), abstract verifierCodePostal() ), et des sous classes
FrenchAddress
USAddress ( qui ajoute un StateCode)
...
il y a une relation 1-1 entre les personnes et les adresses.
Les constraintes
- la classe Personne et les classes Adresses doivent être stockées dans la même table.
- je dois autant que possible utiliser des annotations JPA.
Comment faire?
Merci de votre aide.
--
cd
PS: Ce que j'ai essayé:
Quand j'indique que la classe AbstractAddress est @Embeddable, à la sauvegarde (methode EntityManager.persist() ) d'un objet personne avec son adresse, j'ai l'erreur suivante:
org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: com.castsoftware.pmc.model.topology.VendorDetails
at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:78)
at org.hibernate.tuple.component.AbstractComponentTuplizer.instantiate(AbstractComponentTuplizer.java:89)
at org.hibernate.type.ComponentType.instantiate(ComponentType.java:482)
at org.hibernate.type.ComponentType.deepCopy(ComponentType.java:401)
at org.hibernate.type.TypeFactory.deepCopy(TypeFactory.java:374)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:280)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:213)
[b]Hibernate version:[/b]
Hibernate 3.2
Hibernate Annotations 3.3.0.GA
Hibernate entityManager 3.3.1 GA
[b]Name and version of the database you are using:[/b]
SQLServer 2000
|