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

Spring Java Discussion :

[Hibernate] Problème de suppression


Sujet :

Spring Java

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Par défaut [Hibernate] Problème de suppression
    Bonjour,

    j un un prb de suppression d un tuple ds ma bd, j ai une methode
    void deleteVehicule(Vehicule vehicule);

    dans ma chouce dao je l ai implementé comme ceci:

    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
    package code.dao;
     
    import code.dao.DaoException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import code.tables.*;
     
    public class DaoImplDomaine implements IDao {
    	private SessionFactory sessionFactory;
     
    	public void setSessionFactory(SessionFactory sessionFactory) {
    		this.sessionFactory = sessionFactory;
    	}
     
    	public Vehicule getVehicule(String numvehicule){
    		Session session = sessionFactory.openSession();
     
    		return (Vehicule)session.createQuery("from Vehicule  where NUM_MAT = '" + numvehicule + "'").uniqueResult();
     
    	}
    	public void deleteVehicule(Vehicule vehicule){
    		Session session = sessionFactory.openSession();
    		session.delete(vehicule);
     	}
     
     
     
    }
    je lance le scripte de test Junit si dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void test1() throws ParseException {
     
    		Vehicule v=(Vehicule)dao.getVehicule("hhhh");
    		dao.deleteVehicule(v);
    }
    le test passe bien mais qd je verifie dans ma BD le tuple dont le code est "hhhh" réside encore !!
    est ce que l implementation de deleteVehicule n est pas correcte???

    merci

  2. #2
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 317
    Par défaut
    Tu peux montrer ta config Spring ?

  3. #3
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Par défaut
    c'est bête mais un assertNotNull(v) pourrait être interessant

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Par défaut
    j ai changer mon code est ça marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void deleteVehicule(String vehicule){
    		Session session = sessionFactory.openSession();
    		session.beginTransaction(); 
    		Vehicule v =(Vehicule) session.load(Vehicule.class,vehicule);
    		session.delete(v);
    		session.getTransaction().commit(); 
     	}
    mais c été pas vraiment ça le prb en faite il falait commencé une trasaction session.beginTransaction(); puis faire a la fin session.getTransaction().commit(); sinon ça marche pas!!!
    comme je suis un debutant en hibernate est ce que quelqu un peux m expliquer prqwa ça n as pas marché sans faire le commit().
    merci

  5. #5
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 317
    Par défaut
    Ton sujet était : [Spring][hibernate] prb de suppression
    Donc je pose la question : il te sert à quoi Spring ?

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Par défaut
    Spring me sert pour l integration des differentes couches: web+service+dao et facillite aussi les test unitaire de ces couches

  7. #7
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 317
    Par défaut
    Je ne comprends pas : pourquoi n'utilises-tu pas Spring pour gérer les transactions ?

  8. #8
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut Pb de suppression aussi
    Bonjour,
    D'ailleurs a ce propose, j'utilse dans mon appli web Spring pour gerere les transactions, voici entre autres ce qu'il y a dans ma config Spring :
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
    <ref local="sessionFactory" />
    </property>
    </bean>

    <!-- ================== Définitions des Classes de Service =============== -->
    <bean id="sibalinkServiceTarget" class="fr.britair.testSpring.service.impl.SibalinkServiceImpl">
    <property name="objetSibalinkDAO">
    <ref local="objetSibalinkDAO"/>
    </property>
    <property name="degradationPerfoDAO">
    <ref local="degradationPerfoDAO"/>
    </property>
    </bean>

    <bean id="sibalinkService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
    <ref local="transactionManager"/>
    </property>
    <property name="target">
    <ref local="sibalinkServiceTarget"/>
    </property>
    <property name="transactionAttributes">
    <props>
    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="create*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="delete*">PROPAGATION_REQUIRED</prop>
    </props>
    </property>
    </bean>


    Dans mon DAO qui gère les méthodes CRUD, j'utilise tout simplement :

    public void create(TbGenericInterface data)
    {
    getHibernateTemplate().save(data);
    getSession().flush();
    }

    J'utilise de même les autres méthodes du template hibernate 'delete' et 'update', mais ceci n'a aucun effet sur ma base de données. Mes objets ne sont pas persistés. Un expert Spring peut-il m'aider ? Merci beaucoup.

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Par défaut
    j ai essayé de gerer les transactions avec Spring mais j ai tjr le meme prb, les données ne sont pas ajoutés à ma base si je met pas dans ma couche dao session.getTransaction().commit()

    voila mon fichier applicationcontext
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
     
    <beans>	
    <!--                            HIBERNATE                               -->
    	<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    		<!-- Déclaration des fichiers de mapping -->
    		<property name="mappingResources">
    			<list>
    				<value>code/tables/Users.hbm.xml</value>
    				<value>code/tables/Vehicule.hbm.xml</value>
    			</list>
    		</property>		
    		<!-- Déclaration des paramètres liés à hibernate -->
    		<property name="hibernateProperties">
    			<props>
            <prop key="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</prop>
            <prop key="hibernate.connection.url">jdbc:mysql://localhost/dbtest</prop>
            <prop key="hibernate.connection.username">root</prop>
            <prop key="hibernate.connection.password"></prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <!-- <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop> -->
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
     
    			</props>
    		</property>
    	</bean>
     
     
    	<bean id="myTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    		<property name="sessionFactory"><ref local="mySessionFactory"/></property>
    	</bean>
     
     
    	<bean id="dao" class="code.dao.DaoImplDomaine">
    		<property name="sessionFactory"><ref local="mySessionFactory"/></property>		
    	</bean>
     
    	<bean id="service" 
    		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    		<property name="transactionManager">
    			<ref local="myTransactionManager"/>
    		</property>
    		<property name="target">
    			<bean class="code.service.ServiceImpl">
    				<property name="dao">
    					<ref local="dao"/>
    				</property>
    			</bean>
    		</property>
    		<property name="transactionAttributes">
    			<props>
    				<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    				<prop key="save*">PROPAGATION_REQUIRED</prop>
    				<prop key="delete*">PROPAGATION_REQUIRED</prop>
    			</props>
    		</property>
    	</bean>
     
     
     
     
    </beans>

  10. #10
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 317
    Par défaut
    public void test1() throws ParseException { Vehicule v=(Vehicule)dao.getVehicule("hhhh"); dao.deleteVehicule(v); }
    }
    Si tu appelles directement ta methode dao.deleteVehicule() c'est normal que la transaction ne se fasse pas car dans ta config Spring, les transactions sont gérées au niveau de la couche service (ce qui logique et normal)

    <bean id="sibalinkService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
    <ref local="transactionManager"/>
    </property>
    <property name="target">
    <ref local="sibalinkServiceTarget"/>
    </property>
    <property name="transactionAttributes">
    <props>
    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="create*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="delete*">PROPAGATION_REQUIRED</prop>
    </props>
    </property>
    </bean>
    Il te faut donc utiliser les méthodes de la couche service : sibalinkService.deleteVehicule()

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Par défaut
    j ai changé mon scripte de test mnt j invoque ma chouche service.

    ma configue
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
     
    <beans>	
    <!--                            HIBERNATE                               -->
    	<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    		<!-- Déclaration des fichiers de mapping -->
    		<property name="mappingResources">
    			<list>
    				<value>code/tables/Users.hbm.xml</value>
    				<value>code/tables/Vehicule.hbm.xml</value>
    			</list>
    		</property>		
    		<!-- Déclaration des paramètres liés à hibernate -->
    		<property name="hibernateProperties">
    			<props>
            <prop key="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</prop>
            <prop key="hibernate.connection.url">jdbc:mysql://localhost/dbtest</prop>
            <prop key="hibernate.connection.username">root</prop>
            <prop key="hibernate.connection.password"></prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <!-- <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop> -->
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
     
    			</props>
    		</property>
    	</bean>
     
     
    	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    		<property name="sessionFactory"><ref local="mySessionFactory"/></property>
    	</bean>
     
     
    	<bean id="dao" class="code.dao.DaoImplDomaine">
    		<property name="sessionFactory"><ref local="mySessionFactory"/></property>		
    	</bean>
     
    	<bean id="service" 
    		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    		<property name="transactionManager">
    			<ref local="transactionManager"/>
    		</property>
    		<property name="target">
    			<bean class="code.service.ServiceImpl">
    				<property name="dao">
    					<ref local="dao"/>
    				</property>
    			</bean>
    		</property>
    		<property name="transactionAttributes">
    			<props>
    				<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    				<prop key="save*">PROPAGATION_REQUIRED</prop>
    				<prop key="delete*">PROPAGATION_REQUIRED</prop>
    			</props>
    		</property>
    	</bean>
     
     
     
     
    </beans>
    mon scripte de tests 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public class TestDao extends TestCase {
     
    	// couche [dao]
    	IService service;
    	public IService getService(){
    			return service;
    		}
    	public void setService(IService service){
     
    		this.service=service;
    	}
     
    	// constructeur
    	public void setUp() {
    		service = (IService) (new XmlBeanFactory(new ClassPathResource(
    				"testconf.xml"))).getBean("service");
    	}
     
     
     
     
    	// test1
    	public void test1() throws ParseException {
     
             Vehicule v = new Vehicule();
             v.setMARQUE("peugot");
             v.setNUM_MAT("12ZZ");
             service.saveVehicule(v);
    }
    }
    ma couche dao :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void saveVehicule(Vehicule vehicule){
    		Session session = sessionFactory.openSession();
    		//session.beginTransaction(); 
     
    		session.save(vehicule);
    		//session.getTransaction().commit();
    	}
    la couche service:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void saveVehicule(Vehicule vehicule){
     	dao.saveVehicule(vehicule);
     }
    j ai tjr le meme prb, une fois j enlève session.beginTransaction(); et session.getTransaction().commit();
    rien n est ajouter ds la bd

Discussions similaires

  1. Problème de suppression Hibernate+Struts
    Par sdou9a dans le forum Frameworks Web
    Réponses: 8
    Dernier message: 06/01/2012, 12h09
  2. [Hibernate] Problème de suppression
    Par EXXKA dans le forum Hibernate
    Réponses: 1
    Dernier message: 23/03/2009, 21h30
  3. [JTable] problème après suppression d'une ligne
    Par fredo3500 dans le forum Composants
    Réponses: 7
    Dernier message: 17/03/2005, 10h01
  4. [Excel - VBA] Problème de suppression de lignes...
    Par beholder2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/01/2005, 17h27
  5. Réponses: 4
    Dernier message: 16/04/2004, 08h20

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