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 :

HQL Delete Problème


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut HQL Delete Problème
    Salut,

    J'ai un comportement étrange auquel il y a sûrement une bonne explication.

    Voici un code dont les tests unitaires passent sans souci (sans hql) :
    DAO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public User selectById(Long id) {		
    	return (User)getSession().get(User.class, id);
    }
     
    public void delete(Long id) {		
    	getSession().delete(getSession().get(User.class, id));
    }
     
    private Session getSession() {
    	return sessionFactory.getCurrentSession();
    }
    Test Case :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void testDeleteById() {
    	User user = newUser();
    	user = userDao.insert(user);
    	user = userDao.selectById(user.getId());
    	assertTrue(user != null);
     
    	userDao.delete(user.getId());
    	user = userDao.selectById(user.getId());
    	assertNull(user);
    }
    Si je remplace le delete par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void delete(Long id) {		
    	String hqlDelete = "delete User c where c.id = :id";
    	int affected = getSession().createQuery( hqlDelete )
    	        .setLong( "id", id )
    	        .executeUpdate();		
    	System.out.println(affected);
    }
    Le test ne passera plus, car le selectById me renverra l'objet supprimé.
    J'ai du mal à comprendre le pourquoi du comment.

    A savoir : affected a bien la valeur 1 et si je test dans 2 transactions séparée, le delete est bien effectif. Le problème survient donc au sein d'une même transaction.

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Simplement, parce que le get() retourne l'objet déjà présent dans la session, sans consulter la base de donnée. Et le hql "delete" n'a pas nettoyé le cache de session pour des raison de performance (ca aurait nécessité de faire un get de tous les rows effacés pour vérifier si ils sont présent dans le cache de session).

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Avec beaucoup de retard (J'avais lu la réponse dans l'émail de notif)... Merci

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

Discussions similaires

  1. [DELETE] Problème de rafraichissement
    Par doons dans le forum JPA
    Réponses: 6
    Dernier message: 19/06/2015, 16h22
  2. Download / Execute / Delete Problème
    Par HelpMyBrain dans le forum VBScript
    Réponses: 10
    Dernier message: 28/09/2011, 19h03
  3. Réponses: 3
    Dernier message: 05/01/2009, 16h12
  4. meilleur "DELETE" , problème de suppression ?
    Par floritab dans le forum DB2
    Réponses: 2
    Dernier message: 20/05/2007, 14h58
  5. Requête DELETE problème de WHERE ... ???
    Par snoopy69 dans le forum Access
    Réponses: 4
    Dernier message: 21/11/2005, 11h19

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