-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Sauvegarde d'une sous classe en tant que classe parente
PostPosted: Thu Nov 05, 2009 9:09 am 
Beginner
Beginner

Joined: Fri May 23, 2008 4:37 am
Posts: 25
Bonjour à tous,

J'utilise Hibarente 3 et une base PostgreSQL (sans importance).

J'ai deux classes :
Code:
public abstract class Template {
  ...
  public Image getThubmnlail() { .. }
  ...
}
public class OOTemplate extends Template {
  public OOTemplate(File file) {
    parse(file);
  }

  private void parse(File file) {
     // Lecture du fichier OpenOffice pour charger certains paramètres
     // dont l'image thumbnail
  }
}


La sous classe OOTemplate n'a une utilité que pour le développeur car elle lis un fichier OpenOffice pour récupérer des informations. Mais elle n'ajoute pas de méthode ni de propriétés.

Je veux persister Template j'ai donc écris le mapping qui vas bien :
Code:
<hibernate-mapping>
   <class name="moi.truc.Template" table="templates">
      <id name="name" type="string" length="25"><generator class="assigned" /></id>
      
      <property name="description" type="string" />
      <property name="thumbnail"
         type="moi.truc.dao.impl.hibernate.usertypes.ImageUserType"/>
   </class>
</hibernate-mapping>


Dans mon test j'ai le code suivant :
Code:
Template template = new OOTemplate(new File("./Sample.odt"));
      String name = dao.save(template);


Mais il me renvoie l'exception :
Quote:
Caused by: org.hibernate.MappingException: Unknown entity: moi.truc.OOTemplate
at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:550)
at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1338)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:98)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:693)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
... 22 more


Pour m'en sortir, j'ai tenté de rajouter <subclass> avec un discriminant dans mon mapping mais il veux alors instantier le type OOTemplate or, comme je l'ai dis plus haut, OOTemplate n'apporte rien d'autre qu'une facilitié de création d'un Template depuis un objet File (il est d'ailleurs caché par une Factory dans l'application). Je n'ai docn aucun intérête à faire une différence entre Template et OOTemplate pour la persistence

Comment faire alors pour persister OOTemplate en tant que Template ?

Merci


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.