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 :

Table de jointure avec attribut


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut Table de jointure avec attribut
    J'ai deux tables jointes par une autre qui contient en plus un attribut
    table OE qui a comme clé codeOE et d'autres attributs
    table Produit qui a comme clé codeProduit et d'autres attributs
    et une table RapprochementOEProduit qui fait référence aux deux tables OE et Produit et qui a un champ exception en plus

    alors j'ai mappé ceci :

    RapprochementOEProduit.hbm.xml
    <hibernate-mapping package="fr.paf.persistance">
    <class name="RapprochementOEProduit" table="RAPPROCHEMENTOEPRODUIT">
    <composite-id>
    <key-many-to-one name="codeProduit" class="Produit"
    column="CODEPRODUIT" />
    <key-many-to-one name="codeOE" class="OperationElementaire"
    column="CODEOE"/>
    </composite-id>
    <property name="exception" type="int" column="EXCEPTION" />
    </class>
    </hibernate-mapping>
    et dans mes classe Produit.java et OE.java j'ai réjouté un Set pour contenir les rapprochements ... mais ca ne marche pas ...
    j'ai l'erreur suivante :
    INFO: Mapping class: fr.paf.persistance.RapprochementOEProduit -> RAPPROCHEMENTOEPRODUIT
    30 mai 2007 11:31:37 net.sf.hibernate.cfg.Configuration add
    GRAVE: Could not compile the mapping document
    net.sf.hibernate.MappingException: composite-id class must override equals(): fr.paf.persistance.RapprochementOEProduit
    Si quelqu'un peut m'aider MERCI !!!!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    bon bon j'avance .... j'avais oublié d'implémenter les fonctions equals et hashCode...D'ailleurs si quelqu'un a une explication claire sur l'utilité de ces fonctions car j'ai du mal à les comprendre et quel est leur role a ce niveau d'hibernate?!
    bon j'ai une nouvelle erreur lorsque j'essaye d'inserer dans ma tabe RAPPROCHEMENTOEPRODUIT il me met :
    Hibernate: insert into RAPPROCHEMENTOEPRODUIT (EXCEPTION, CODEPRODUIT, CODEOE) values (?, ?, ?)
    30 mai 2007 12:15:24 net.sf.hibernate.impl.SessionImpl execute
    GRAVE: Could not synchronize database state with session
    Erreur Base de Donnees - Creation Rapprochement
    net.sf.hibernate.MappingException: Unknown entity class: java.lang.Integer
    Si quelqu'un peut m'aider ....merciiiiiii

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    personne n'a une petite idée alors

    comment que je vais faire ?!

    Mercii !!!

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Alors pour ce qui est de equals et hashCode, c'est un peu dit dans la javadoc ...
    equals définit l'égalité entre deux objets.
    hashCode est utilisé pour toutes les Hash, comme HashMap ou HashSet. Il est également parfois utilisé comme premier de niveau de vérification de equals, donc attention au contrat : a.equals(b) => a.hashCode()==b.hashCode()

    Dans le cas d'Hibernate, il me semble que les Set qu'il gère sont des HashSet, mais je ne suis plus sûr du tout.

    Sinon, pour ton problème, il s'agit d'un problème de mapping... Avec la stack complète on pourrait peut etre t'aider, là comme ça je ne vois pas

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    merci chtiq pour cette réponse...
    la stack je sais pas ce que t'entends par ca LOL ... mais bon je mets tt les sources et ttes l'érreur :
    le RAPPROCHEMENTOEPRODUIT.hbm.xml
    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" encoding='utf-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    <hibernate-mapping package="fr.paf.persistance">
    	<class name="RapprochementOEProduit" table="RAPPROCHEMENTOEPRODUIT">
    		<composite-id>
    			<key-many-to-one name="codeProduit" 
    				class="Produit"/>
    			<key-many-to-one name="codeOE" 
    				class="OperationElementaire"/>
    		</composite-id>
    		<property name="exception" type="int" column="EXCEPTION" />
    	</class>
    </hibernate-mapping>
    le RAPPROCHEMENTOEPRODUIT.java

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    package fr.paf.persistance;
     
    import java.io.Serializable;
     
    public class RapprochementOEProduit implements Serializable {
     
    	private String codeOE;
    	private String codeProduit;
    	private int exception;
     
    	public RapprochementOEProduit(){}
     
    	public String getCodeOE() {
    		return codeOE;
    	}
     
    	public void setCodeOE(String codeOE) {
    		this.codeOE = codeOE;
    	}
     
     
     
    	public String getCodeProduit() {
    		return codeProduit;
    	}
     
    	public void setCodeProduit(String codeProduit) {
    		this.codeProduit = codeProduit;
    	}
     
    	public int getException() {
    		return exception;
    	}
     
    	public void setException(int exception) {
    		this.exception = exception;
    	}
     
    	public boolean equals(Object other) {
     
    		System.out.println("ON PASSE PAR EQUALS");
     
    		if (this == other) return true;
    		if (!(other instanceof RapprochementOEProduit)) return false;
     
            final RapprochementOEProduit cat = (RapprochementOEProduit) other;
            System.out.println("CODE OE cette instacnce "+getCodeOE());
            System.out.println("CODE OE instacnce comparée "+cat.getCodeOE());
            if (!getCodeOE().equals(cat.getCodeOE())) return false;
            if (!(getCodeProduit().equals(cat.getCodeProduit()))) return false;
     
            return true;
        }
     
        public int hashCode() {
        	System.out.println("ON PASSE PAR HASHCODE");
            int result=0;
            result = getCodeOE().hashCode()+getCodeProduit().hashCode();
            return result;
        }
        public String toString()
        {
        	String s;
        	s="OE : "+getCodeOE()+"\n";
        	s+="Produit : "+getCodeProduit()+"\n";
        	s+="Exception : "+getException();
        	return s;
        }
     
     
    }

    le Produit.hbm.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding='utf-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    <hibernate-mapping package="fr.cnp.paf.persistance">
    	<class name="Produit" table="PRODUIT">
    		<id name="codeProduit" type="string" column="CODEPRODUIT">
    			<generator class="assigned" />
    		</id>
    		<property name="libelleProduit" />
    		<property name="systeme" />
    		<property name="valideProduit" type="int" />
    		<property name="dateCreationProduit" type="date" />
    		<property name="dateEffetProduit" type="date" />
    	</class>
    </hibernate-mapping>

    le OperationElementaire.hbm.xml

    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
    <?xml version="1.0" encoding='utf-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    <hibernate-mapping package="fr.cnp.paf.persistance">
    	<class name="OperationElementaire" table="OPERATIONELEMENTAIRE">
    		<id name="codeOE" type="string" column="CODEOE">
    			<generator class="assigned" />
    		</id>
    		<property name="libelleOE" />
    		<property name="valideOE" type="int" />
    		<property name="etatOE" type="int" />
    		<many-to-one name="codeAppli" class="Application"
    			column="CODEAPPLI" not-null="true" />
    		<property name="dateCreationOE" type="date" />
    		<property name="dateEffetOE" type="date" />
     
     	<set name="menus" table="CORRESPONDANCEMENUOE">
       	<key column="CODEOE" />
       	<many-to-many class="Menu" column="IDMENU"/>
        </set>
     
    	</class>
    </hibernate-mapping>
    et l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Hibernate: insert into RAPPROCHEMENTOEPRODUIT (EXCEPTION, codeProduit, codeOE) values (?, ?, ?)
    1 juin 2007 15:02:44 net.sf.hibernate.impl.SessionImpl execute
    GRAVE: Could not synchronize database state with session
    Erreur Base de Donnees - Creation Rapprochement
    net.sf.hibernate.MappingException: Unknown entity class: java.lang.String
    ouais j'ai changé de type je suis passé de int à String car j'avais cru voir que ca aurait pu venir de ca mais non

    et je crée l'objet ds une classe:
    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
    public static void enregistrerRapprochementOEProduit(String OE,ArrayList codesProduits,String exception)
    	{
    		try
    		{
    		Session session = HibernateUtil.currentSession();
    		Transaction tx = session.beginTransaction();
     
    		int nbProduit = codesProduits.size();
    		for (int i=0;i<nbProduit;i++)
    		{
    			RapprochementOEProduit rapp= new RapprochementOEProduit();
    			rapp.setCodeOE(OE);
    			String cp = (String) codesProduits.get(i);
    			rapp.setCodeProduit(cp);
    			if (exception.equals("true"))
    			{
    				rapp.setException(1);
    			}
    			else
    			{
    				rapp.setException(0);
    			}
     
    			session.save(rapp);
    			tx.commit();
    		}
    voilà merci chtiq pr ta réponse jcommencais a desespérer ....

  6. #6
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Alors deux petites remarques avant tout :
    1) conventions de nommage : si tu utilises une abbréviation, ça donne quand même oE comme nom de variable et non OE
    2) Pour le code, utilise les balises et non les balises quote...

    Pour ce qui est de ton problème, je n'ai pas compris ce que tu as changé par rapport à avant...

    Quant à ton log, c'est un log lo4j ?? Si oui, passe en debug stp.
    La stack c'est la pile des appels que tu as dans une Exception. Là on a aucune idée de où ton exception se produit ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Doctrine] Peupler des tables n-n avec attributs avec fixture
    Par avalo dans le forum ORM
    Réponses: 6
    Dernier message: 01/09/2011, 14h00
  2. Réponses: 4
    Dernier message: 06/08/2010, 10h38
  3. [Mapping] Table de liaison avec attributs
    Par JulCh dans le forum Hibernate
    Réponses: 0
    Dernier message: 06/07/2010, 09h10
  4. Table d'association avec attribut
    Par SheenaRingo dans le forum Hibernate
    Réponses: 5
    Dernier message: 23/10/2008, 12h04
  5. Pb pour créer table de jointure avec un attribut
    Par cissou06 dans le forum Ruby on Rails
    Réponses: 0
    Dernier message: 28/05/2008, 17h30

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