IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

DuplicateMappingException : problème avec les annotations


Sujet :

Hibernate Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Par défaut DuplicateMappingException : problème avec les annotations
    Bonjour à tous !

    Voilà, je suis en train de réaliser une petite application en J2EE, qui fonctionne très bien avec Hibernate en mapping "standard", mais lorsque j'essaie de passer en annotations, rien ne va plus, je récupère cette exception : DuplicateMappingException.

    Pour ne pas devoir faire des modifications de code trop coûteuse entre la version annotée et celle qui ne l'est pas, j'essaie de garder les 2 dans mon application, grâce au paramètre hibernate.mapping.precedence de mon fichier hibernate.cfg.xml. Cependant j'ai également testé la version en annotation seule, et ça ne fonctionne pas non plus ^^

    Voici mon bean annoté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    package mywebapp.bean.data;
     
    import javax.persistence.*;
     
    import mywebapp.bean.form.ArticleForm;
     
    @Entity
    @Table(name="article")
    public class Article {
     
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	private String reference;
    	@Column(name="nom")
    	private String nom;
    	@Column(name="stock")
    	private int stock;
     
    	public Article(){}
     
    	public Article(String reference, String nom, int stock){
    		this.reference = reference;
    		this.nom = nom;
    		this.stock = stock;
    	}
     
    	public String getReference() {
    		return reference;
    	}
     
    	public void setReference(String reference) {
    		this.reference = reference;
    	}
     
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public int getStock() {
    		return stock;
    	}
     
    	public void setStock(int stock) {
    		this.stock = stock;
    	}
     
    	public ArticleForm toArticleForm(){
    		return new ArticleForm(this.reference,this.nom);
    	}
     
    }
    Le fichier Article.hbm.xml, dans le même dossier, qui me sert pour la mapping "standard" et que j'aimerais ne pas devoir supprimer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version="1.0"?><!DOCTYPE hibernate-mapping
      PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
      <class name="mywebapp.bean.data.Article" table="article">
        <id name="reference" type="string" column="reference">
          <generator class="assigned"/>
        </id>
        <property name="nom" type="string" not-null="true" />
        <property name="stock" type="integer" not-null="true" />
      </class>
    </hibernate-mapping>
    Mon fichier de configuration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    <session-factory>
    	<property name="connection.url">jdbc:mysql://localhost/test</property>
    	<property name="connection.username">root</property>
    	<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    	<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    	<property name="connection.password"></property>
        <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
        <!--  thread is the short name for
          org.hibernate.context.ThreadLocalSessionContext
          and let Hibernate bind the session automatically to the thread
        -->
        <property name="current_session_context_class">thread</property>
        <!-- this will show us all sql statements -->
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.mapping.precedence">class, hbm</property>
     
    	<!-- mapping files -->
    	<mapping class="mywebapp.bean.data.Article" />
    	<mapping class="mywebapp.bean.data.Commande" />
    	<mapping resource="mywebapp/bean/data/Article.hbm.xml" />
    	<mapping resource="mywebapp/bean/data/Commande.hbm.xml" />
     
    </session-factory>
    </hibernate-configuration>
    Et pour finir, mes magnifiques exceptions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    org.hibernate.DuplicateMappingException: Duplicate class/entity mapping mywebapp.bean.data.Article
    	org.hibernate.cfg.Mappings.addClass(Mappings.java:141)
    	org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:167)
    	org.hibernate.cfg.Configuration.add(Configuration.java:702)
    	org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:483)
    	org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:277)
    	org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1319)
    	org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)
    	mywebapp.utils.HibernateFactory.createSessionFactory(HibernateFactory.java:16)
    	mywebapp.services.policy.GererArticlePolicy.getNbArticles(GererArticlePolicy.java:66)
    	mywebapp.action.OperationsAction.listerArticles(OperationsAction.java:106)
    	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	java.lang.reflect.Method.invoke(Unknown Source)
    	org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
    	org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
    	org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
    	org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
    	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
    	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
    	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:113)
    	org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:96)
    	org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54)
    	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
    	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
    	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    Je croyais pouvoir définir une priorité entre le mapping "standard" et le mapping par annotation grâce à ce paramètre de mon fichier de configuration, mais a priori ça ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="hibernate.mapping.precedence">class, hbm</property>
    Pour information, j'ai déjà essayé d'enlever mon fichier Article.hbm.xml ainsi que sa ligne de déclaration dans le fichier de configuration, mais ça n'a rien changé... Toujours cette même exception.

    Voilà, si quelqu'un trouve une solution à mon problème, je suis ouverte à toute proposition !

  2. #2
    Nouveau candidat au Club
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Par défaut Cohabitation annotations et hbm impossible
    Je pense par expérience qu'il faut utiliser soit les annotations (@Entity, @Id, @Column, ...) ou un fichier hbm pour une classe mais pas les deux à la fois, ce qui n'empêche pas de mapper certaines classes avec les annotations et d'autres avec les fichiers xml.

Discussions similaires

  1. [EJB3 Entity] Problème avec les annotations de type @OneToMany
    Par Hello_World dans le forum Java EE
    Réponses: 6
    Dernier message: 30/08/2010, 14h20
  2. Hibernate 3.5 Problème avec les annotations
    Par irnbru dans le forum Hibernate
    Réponses: 3
    Dernier message: 11/04/2010, 15h14
  3. [EJB3 Entity] Problème avec les annotations pour une List d'Enum
    Par uiscias dans le forum Java EE
    Réponses: 2
    Dernier message: 31/03/2009, 17h09
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44
  5. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo