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 :

[Hb 3] Problème de cache - duplicate entry lors d'un saveOrUpdate


Sujet :

Hibernate Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 33
    Points : 26
    Points
    26
    Par défaut [Hb 3] Problème de cache - duplicate entry lors d'un saveOrUpdate
    Bonjour,

    Je rencontre actuellement un crash de mon application où l'erreur remontée est "could not execute jdbc batch update" avec un duplicate entry.

    Après analyse, voilà le scénario qui fait planter l'application.
    Un utilisateur A branché sur mon appli locale qui pointe sur une base de données distante appelée X
    Un utilisateur B branché sur mon appli distance (sur autre instance jboss donc...) pointe la même base de données X que l'applu du user A.

    A créer un dossier puis attend.
    B créer un dossier puis attend
    A veut créer un nouveau dossier et là ca plante!

    Mon diagnostique montre qu'hibernate ne se rend pas compte qu'un nouvel ajout a eu lieu en base par un tiers. Donc un problème de cache.

    J'ai tenté pleins de choses notamment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    getHibernateSession().flush();
    getHibernateSession().clear(); 		getHibernateSession().setCacheMode(getHibernateSession().getCacheMode().REFRESH);
    getHibernateSession().setFlushMode(getHibernateSession().getFlushMode().COMMIT);
    Voici le code de mon saveOrUpdate()
    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
     protected Integer saveOrUpdateGetID(Object pObject) {
     
        	setAutoCommit(false);
        	Transaction uneTransaction = null;
        	Integer unIdGenere = null;
        	try {
        		getHibernateSession().flush();
        		getHibernateSession().clear();
        		getHibernateSession().setCacheMode(getHibernateSession().getCacheMode().REFRESH);
        		getHibernateSession().setFlushMode(getHibernateSession().getFlushMode().COMMIT);
        		uneTransaction = getHibernateSession().beginTransaction();
        		getHibernateSession().saveOrUpdate(pObject);
        		unIdGenere = (Integer) getHibernateSession().getIdentifier(pObject);
        		uneTransaction.commit();
        		setAutoCommit(true);
        	} catch (Throwable sx) {
        		try {
        			uneTransaction.rollback();
        			setAutoCommit(true);
        			throw new RuntimeException(sx.getMessage(), sx);
        		} catch (HibernateException e) {
        			Logger.getLogger( " error during rollback (save or update) " + e.getMessage());
            		HibernateSession.fermerSession();
        		}
        	} finally {
    			HibernateSession.fermerSession();
    		}
        	return unIdGenere;
        }

    Quelqu'un aurait une piste pour moi? Car je suis vraiment bloqué.

    Merci d'avance.

    Vince

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Tu utilises quoi comme méthode de génération des ID ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    C'est géré directement par hibernate avec l'auto_increment dans le hbm

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Voilà ton problème, il ne faut pas passer par auto-increment.
    Quelle base utilises-tu ?
    En fonction, tu peux choisir identity, sequence ou autre...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    J'utilise la base de données MySql 5

    Dans mon hbm, c'est mis ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     <id name="identifiant" type="java.lang.Integer">
            	<meta attribute="use-in-equals">true</meta>
                <column name="PCI_ID" />
                <generator class="increment"/>
            </id>

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Pour MySql, il faut utiliser Identity.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Super, ca semble résoudre tous mes problèmes. Merci beaucoup!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/02/2009, 14h37
  2. Réponses: 2
    Dernier message: 16/07/2008, 13h56
  3. Réponses: 4
    Dernier message: 29/06/2007, 16h08
  4. problème de cache lors du chargement d'applet
    Par ellocin dans le forum Applets
    Réponses: 4
    Dernier message: 05/04/2007, 12h31
  5. problème duplicate entry
    Par beberd dans le forum Requêtes
    Réponses: 6
    Dernier message: 21/03/2007, 16h54

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