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 :

Probleme avec delete


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 123
    Points : 47
    Points
    47
    Par défaut Probleme avec delete
    Bonjour tout le monde.
    je travaille sur une petite application avec Hibernate.
    tout est marché bien sauf le delete--Suppression d'un enregistrement de ma base de donnée MySQL--.
    Bon j m'explique avec du code :
    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
     
    package personne;
     
    import java.util.List;
     
    import org.hibernate.Session;
    import org.hibernate.Transaction;
     
    public class PersonManager {
     
    	/**
             * @param args
             */
    	public void createPerson(int a,String n,String p){
    		Session session=HibernateSessionFactory.currentSession();
    		Transaction tx=session.beginTransaction();
    		Personne p1=new Personne();
    		p1.setAge(a);
    		p1.setNom(n);
    		p1.setPrenom(p);
    		session.save(p1);
    		tx.commit();	
    	}
    	public List listPersons(){
    		Session session=HibernateSessionFactory.currentSession();
    		Transaction tx=session.beginTransaction();
    		List result=session.createQuery("from Personne").list();
    		tx.commit();
    		return result;
    	}
    	public List listPerson(String n, String p){
    		Session session=HibernateSessionFactory.currentSession();
    		Transaction tx=session.beginTransaction();
    		List result=session.createQuery("from Personne where nom='"+n+"'and prenom='"+p+"'").list();
    		tx.commit();
    		return result;
    	}
    	public void deletePerson(Personne p){
    		Session session=HibernateSessionFactory.currentSession();
    		Transaction tx=session.beginTransaction();
    		session.delete(p);
    		tx.commit();
    	}
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		PersonManager pm=new PersonManager();
    		Personne per=new Personne();
    		per.setNom("bobo");
    		per.setPrenom("dodo");
    		/*per.setId(3);*/
    		pm.deletePerson(per);
    		HibernateSessionFactory.closeSession();
    	}
    }
    La suppression ne se fait que lorsque je definie le ID de la personne que je veux supprimer (ds Methode deletePerson), et non avec le nom et le prenom seulement, et l'erreur qui me sorte est :
    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
     
    Exception in thread "main" org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1
    	at org.hibernate.jdbc.BatchingBatcher.checkRowCount(BatchingBatcher.java:92)
    	at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:78)
    	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:57)
    	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:174)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:226)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
    	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
    	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
    	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
    	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:324)
    	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:86)
    	at personne.PersonManager.deletePerson(PersonManager.java:35)
    	at personne.PersonManager.main(PersonManager.java:43)
    et c'est la meme erreur qui me sorte lorsque j'execute la methode listPerson (Recherche d'une personne avec le nom et le prenom en parametre).

    bon avant de terminer voila mon fichier de mapping :
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
    <hibernate-mapping>
        <class name="personne.Personne" table="personne">
            <id name="id" column="Id">
                <generator class="increment"/>
            </id>
            <property name="nom" column="Nom"/>
            <property name="prenom" column="Prenom"/>
            <property name="age" column="Age"/>
        </class>
    </hibernate-mapping>
    et le 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
     
    <?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">
     
    <!-- Generated by MyEclipse Hibernate Tools.                   -->
    <hibernate-configuration>
     
    <session-factory>
    	<property name="connection.username">root</property>
    	<property name="connection.url">jdbc:mysql://localhost:3306/hibernatebd</property>
    	<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    	<property name="myeclipse.connection.profile">ProTest</property>
    	<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    	<mapping resource="personne/personne.hbm.xml" />
     
    </session-factory>
     
    </hibernate-configuration>
    Si quelqu'un a déjà rencontré le meme probleme que moi, qu'il m'explique qu'est ce qu'il faut faire ?
    et Merci bien

  2. #2
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 123
    Points : 47
    Points
    47
    Par défaut
    J'ai mis deux catchs au niveau de la methode deletePerson, et plus precisement sur session.delete et tx.commit, et l'exception levée est celle qui concerne le commit.

  3. #3
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Points : 252
    Points
    252
    Par défaut
    Et tu as bien des données en base qui correspondent à celles que tu veux supprimer ?

  4. #4
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 123
    Points : 47
    Points
    47
    Par défaut
    bien sur que oui (Ce sont des données de test).

  5. #5
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Points : 252
    Points
    252
    Par défaut
    Ok j'avais mal lu ton post.

    Donc je confirme que ton code ne peux pas marcher tel quel.
    L'objet que tu veux supprimer doit soit :
    • être chargé par la session
    • contenir l'identifiant de l'objet à supprimer

    Confert la javadoc de session pour delete
    Remove a persistent instance from the datastore. The argument may be an instance associated with the receiving Session or a transient instance with an identifier associated with existing persistent state.
    Donc soit tu renseignes l'ID, soit tu charges l'objet par la session puis tu le détruit.

    Matthieu

Discussions similaires

  1. probleme AVEC delete
    Par norais dans le forum Langage
    Réponses: 1
    Dernier message: 28/08/2012, 01h35
  2. Problem avec Delete
    Par anarkia dans le forum C++
    Réponses: 6
    Dernier message: 21/09/2009, 17h40
  3. Probleme avec "delete en ADO
    Par nguhv dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/04/2007, 09h26
  4. Probleme avec delete[]
    Par anisjemmali dans le forum C++
    Réponses: 4
    Dernier message: 28/03/2007, 18h46
  5. [ EJB ] [JBoss ] [ XDoclet ] probleme avec cascade-delete
    Par Houbbba dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 03/05/2006, 11h05

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