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

Développement Web en Java Discussion :

DELETE avec Criteria


Sujet :

Développement Web en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 82
    Par défaut DELETE avec Criteria
    Bonjour,

    J'ai une petite question, je veux supprimer une ligne de la table "client" avec Criteria! Alors pour récuperer ma ligne j'ai utilisé ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
    Client client = (Client) session.createCriteria(Client.class).add(Restrictions.eq("id", id)).uniqueResult();
    Et je termine ce code avec un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session.delete(client);
    Ce qui me supprime rien de ma base! Je sais pas qu'est ce qui cloche

    Si quelqu'un pourrait m'aider

    Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Tu dois commiter la transaction.

    A+.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 82
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Bonjour,

    Tu dois commiter la transaction.

    A+.
    Enfin une réponse!! Merci beaucoup pour ta réponse andry.aime

    J'ai exécuté le commit comme tu m'a dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public Client deleteClient(BigDecimal id){
    		Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
    		session.beginTransaction();
    		Client client = (Client) session.createCriteria(Client.class).add(Restrictions.eq("id", id)).uniqueResult();
    		session.delete(client);
    		session.getTransaction().commit();
    		return null;
    	}
    et ça me sort cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: Transaction not successfully started
    	org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:610)
    	org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:709)
    ...
    Où est le problème?

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Utilise getHibernateTemplate().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public Client deleteClient(BigDecimal id){
    		Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
    		Client client = (Client) session.createCriteria(Client.class).add(Restrictions.eq("id", id)).uniqueResult();
    		getHibernateTemplate().delete(client);
    		return null;
    	}
    A+.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 82
    Par défaut
    J'ai ajouté le getHibernateTemplate() et ça ma sortie une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
    	org.springframework.orm.hibernate3.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1182)
    ...
    Mon fichier applicationContext.xml est comme suit:

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    	<!-- Application context DAO layer -->
     
    <beans>
    	<!-- sessionFactory  -->
    	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    		<property name="configLocation">
    			<value>classpath:hibernate.cfg.xml</value>
    		</property>
    		<property name="configurationClass">
    			<value>org.hibernate.cfg.AnnotationConfiguration</value>
    		</property>
    	</bean>
     
     
    	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    		<property name="sessionFactory" ref="sessionFactory" />
    	</bean>
    	<bean id="transactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    		<property name="transactionManager">
    			<ref bean="transactionManager" />
    		</property>
    		<property name="transactionAttributes">
    			<props>
    				<prop key="insert*">PROPAGATION_REQUIRED</prop>
    				<prop key="update*">PROPAGATION_REQUIRED</prop>
    				<prop key="save*">PROPAGATION_REQUIRED</prop>
    				<prop key="*">PROPAGATION_REQUIRED</prop>
    			</props>
    		</property>
    	</bean>
     
    <!-- General  -->
    	<!-- client bean configuration -->
    	<bean id="clientDao" class="ma.dao.imp.ClientDaoImp">
    		<property name="sessionFactory">
    			<ref bean="sessionFactory" />
    		</property>
    	</bean>
     
    	<bean id="clientManagerTarget" class="ma.service.imp.ClientManagerImp">
    		<property name="clientDao">
    			<ref bean="clientDao" />
    		</property>
    	</bean>
    	<bean id="clientManager" parent="transactionProxy">
    		<property name="target">
    			<ref bean="clientManagerTarget" />
    		</property>
    		<property name="transactionAttributeSource">
    			<bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource" />
    		</property>
    	</bean>
    </beans>

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    J'ai d'abord quelque remarques:
    1- D'abord, tu n'es pas obligé de récupérer l'objet de la session pour le supprimer. Tu peux utiliser un Query.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery
    2- C'est mieux d'utiliser un xsd à la place d'un doctype.
    3- Pour chercher un objet à partir d'un id, tu peux faire plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Client) getHibernateTemplate().get(Client.class, id);
    Sinon, c'est un projet web?
    Si c'est le cas, ajoute dans ton web.xml
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <filter>
        <filter-name>openSessionInViewFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
        <init-param>
            <param-name>flushMode</param-name>
            <param-value>AUTO</param-value>
        </init-param>
    </filter>
    Sinon ajoute l'annotation @Transactional(readOnly=false) pour la méthode.

    A+.

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

Discussions similaires

  1. Delete avec polymorphisme
    Par taron dans le forum C++
    Réponses: 4
    Dernier message: 05/01/2006, 22h29
  2. Delete avec jointure impossible
    Par _developpeur_ dans le forum Access
    Réponses: 13
    Dernier message: 18/11/2005, 16h22
  3. dbexpress : delete avec paramètre
    Par KRis dans le forum Bases de données
    Réponses: 2
    Dernier message: 14/06/2005, 10h04
  4. DELETE avec sous-requête
    Par say dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/04/2005, 08h20
  5. INTERBASE: DELETE avec sous requete conditionnelle
    Par Papino dans le forum InterBase
    Réponses: 6
    Dernier message: 17/02/2005, 22h55

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