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 :

Duplicate entry avec save()


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Par défaut Duplicate entry avec save()
    Bonjour !

    Je réalise actuellement une petite application JEE avec Hibernate, histoire de me familiariser avec ce dernier ... et apparemment c'est pas gagné

    J'ai donc 2 classes/tables : une classe User, avec une adresse mail comme identifiant, et quelques autres propriétés, et une classe Ticket, avec un identifiant 'classique' entier, quelques propriétés et ... 2 Users (un vendeur -seller- et un acheteur -buyer-). Le problème arrive lorsque je veux sauvegarder un Ticket, avec un vendeur défini, dont je récupère l'adresse mail (son identifiant donc) dans ma session http (l'acheteur est à null) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WARN [JDBCExceptionReporter:100] SQL Error: 1062, SQLState: 23000
    ERROR [JDBCExceptionReporter:101] Duplicate entry 'toto@nullmail.com' for key 'PRIMARY'
    ERROR [AbstractFlushingEventListener:324] Could not synchronize database state with session
    Et en effet, quand je regarde les requêtes, j'ai bien une nouvelle insertion d'un User, et c'est ça que je ne comprend pas, et que je n'arrive pas à résoudre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Hibernate: 
        insert 
        into
            TICKET
            (DEPARTURECITY, ARRIVALCITY, DEPARTUREDATE, ARRIVALDATE, INITIALPRICE, FINALPRICE, VALIDITY, SELLER, BUYER, ISSOLD, PUBLISHDATE) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
    Hibernate: 
        insert 
        into
            USER
            (FIRSTNAME, LASTNAME, PASSWORD, EMAIL) 
        values
            (?, ?, ?, ?)
    Et voici un 'résumé' (la partie qui nous intéresse quoi) de ma servlet utilisée pour écrire cette classe en base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Ticket newTicket = new Ticket();
    HttpSession session = request.getSession();
    HibernateUser hu = new HibernateUser();
    Object userEmail = session.getAttribute("userEmail");
    newTicket.setSeller(hu.getByEmail(userEmail.toString()));
    HibernateTicket ht = new HibernateTicket();
    ht.save(newTicket);
    Ma fonction save() de HibernateTicket :
    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
    public void save(Ticket ticket) {
    		Session session = HibernateUtil.getSessionFactory().openSession();
    		Transaction transaction = null;
    		try {
    			transaction = session.beginTransaction();
    			//session.merge(ticket.getSeller());
    			session.persist(ticket);
    			transaction.commit();
    		} catch (HibernateException he) {
    			he.printStackTrace();
    			if(transaction != null) {
    				try { transaction.rollback(); } catch(HibernateException he2) {
    				he2.printStackTrace(); }
    			}
    		}
    		finally {
    			if(session != null) {
    				try { session.close(); } catch(HibernateException he) {
    				he.printStackTrace(); }
    			}
    		}
    	}
    Et le contenu de mon fichier Ticket.hbm.xml :
    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
    <hibernate-mapping>	
    	<class name="model.Ticket" table="TICKET">
    		<id name="id" column="ID">
    			<generator class="identity">
    			</generator>
    		</id>
    		<property name="departureCity" column="DEPARTURECITY"/>
    		<property name="arrivalCity" column="ARRIVALCITY"/>
    		<property name="departureDate" column="DEPARTUREDATE"/>
    		<property name="arrivalDate" column="ARRIVALDATE"/>
    		<property name="initialPrice" column="INITIALPRICE"/>
    		<property name="finalPrice" column="FINALPRICE"/>
    		<property name="validity" column="VALIDITY"/>
    		<many-to-one name="seller" class="model.User" column="SELLER" cascade="all"/>
    		<many-to-one name="buyer" class="model.User" column="BUYER" cascade="all"/>
    		<property name="isSold" column="ISSOLD"/>
    		<property name="publishDate" column="PUBLISHDATE"/>
    	</class>
    </hibernate-mapping>
    Voilà, j'espère que j'ai mis tous les éléments nécessaires à la compréhension de mon problème, n'hésitez pas à me signaler s'il manque quelque chose, et si une âme charitable pourrait m'aider avec tout ça, je lui en serait infiniment reconnaissant !

    Merci d'avance !

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Par défaut
    Bon, j'ai finalement trouvé, il suffisait de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session.persist(ticket);
    par :
    Par contre, je ne comprend pas pourquoi ... est-ce qu'on pourrait m'expliquer siouplait ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/04/2015, 12h00
  2. Erreur bizarre "Duplicate entry" avec un int(11)
    Par Cedricweb dans le forum MySQL
    Réponses: 4
    Dernier message: 11/03/2009, 11h49
  3. Réponses: 2
    Dernier message: 26/12/2008, 15h34
  4. Réponses: 2
    Dernier message: 16/07/2008, 13h56
  5. [MySQL] duplicate entry avec unique
    Par djoumusic dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 07/07/2008, 20h03

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