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

Persistance des données Java Discussion :

[iBatis] Spring Ibatis Mysql


Sujet :

Persistance des données Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 163
    Par défaut [iBatis] Spring Ibatis Mysql
    Salut,
    je suis entrain de faire les tuto de serge tahé sur SpringMVC, il propose une appli web avec SpringMVC et Ibatis + BD Mysql. Le probléme c'est ce que j'arrive pas a ajouter des enregistrement à la BD il m'affiche l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    L'exception suivante s'est produite : SqlMapClient operation; SQL [];
     --- The error occurred in personnes-mysql.xml. --- The error occurred while
     applying a parameter map. --- Check the 
    Personne.insertOne-InlineParameterMap. --- Check the statement (update failed).
     --- Cause: java.sql.SQLException: Duplicata du champ '0' pour la clef 1; 
    nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
     --- The error occurred in personnes-mysql.xml. --- The error occurred while
     applying a parameter map. --- Check the 
    Personne.insertOne-InlineParameterMap. --- Check the statement (update failed). 
    --- Cause: java.sql.SQLException: Duplicata du champ '0' pour la clef 1
    je crois que le probleme viens du fichier personnes-mysql.xml et plus précisement du code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <selectKey resultClass="int" keyProperty="id">
    	    	SELECT LAST_INSERT_ID() AS id
    	  </selectKey>
    car il faut generer l'id automatiquement (c'est la clé primaire).

    Est ce qu'il y a qlq'un qui a deja fait se tuto, ou bien si qlq'un comprend ce je raconte.
    Merci

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 870
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 870
    Par défaut
    Salut,

    Je ne suis pas sûr que le problème vienne du bout de code que tu as fournis.

    Peux-tu fournir l'intégralité du fichier ?

    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 163
    Par défaut
    Le voila le fichier

    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
    <?xml version="1.0" encoding="UTF-8" ?>
     
    <!DOCTYPE sqlMap
        PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
        "http://www.ibatis.com/dtd/sql-map-2.dtd">
     
    <sqlMap>
    	<!-- alias classe [Personne] -->
    	<typeAlias alias="Personne.classe" 
    		type="istia.st.springmvc.personnes.entites.Personne"/>
    	<!-- mapping table [PERSONNES] - objet [Personne] -->
    	<resultMap id="Personne.map" 
    		class="istia.st.springmvc.personnes.entites.Personne">
    		<result property="id" column="ID" />
    		<result property="version" column="VERSION" />
    		<result property="nom" column="NOM"/>
    		<result property="prenom" column="PRENOM"/>
    		<result property="dateNaissance" column="DATENAISSANCE"/>
    		<result property="marie" column="MARIE"/>
    		<result property="nbEnfants" column="NBENFANTS"/>
    	</resultMap>
    	<!-- liste de toutes les personnes -->
    	<select id="Personne.getAll" resultMap="Personne.map" > select ID, VERSION, NOM, 
    		PRENOM, DATENAISSANCE, MARIE, NBENFANTS FROM PERSONNES</select>
    	<!-- obtenir une personne en particulier -->
    		<select id="Personne.getOne" resultMap="Personne.map" >select ID, VERSION, NOM, 
    		PRENOM, DATENAISSANCE, MARIE, NBENFANTS FROM PERSONNES WHERE ID=#value#</select>
    	<!-- ajouter une personne -->
    		<insert id="Personne.insertOne" parameterClass="Personne.classe">
    		insert into 
    		PERSONNES(VERSION, NOM, PRENOM, DATENAISSANCE, MARIE, NBENFANTS) 
    		VALUES(#version#, #nom#, #prenom#, #dateNaissance#, #marie#, 
    		#nbEnfants#) 
    		<selectKey keyProperty="id">
    			select LAST_INSERT_ID() as value
    		</selectKey> 		
    	</insert>
    	<!-- mettre à jour une personne -->
    	<update id="Personne.updateOne" parameterClass="Personne.classe"> update 
    		PERSONNES set VERSION=#version#+1, NOM=#nom#, PRENOM=#prenom#, DATENAISSANCE=#dateNaissance#, 
    		MARIE=#marie#, NBENFANTS=#nbEnfants# WHERE ID=#id# and 
    		VERSION=#version#</update>
    	<!-- supprimer une personne -->
    	<delete id="Personne.deleteOne" parameterClass="int"> delete FROM PERSONNES WHERE 
    		ID=#value# </delete>
    	<!-- obtenir la valeur de la clé primaire [id] de la dernière personne insérée -->
    	<select id="Personne.getNextId" resultClass="int">select 
    		LAST_INSERT_ID()</select>
    </sqlMap>
    Merci

  4. #4
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 870
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 870
    Par défaut
    Ton problème vient donc en effet de ton id.

    Normalement, tu n'as pas à passer la valeur, donc ton champ devrait être null ( de préférence id devrait être un objet Integer ) et ensuite, dans ta base de données MySQL, ton champ id doit être positionné en tant que "auto_increment".

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 163
    Par défaut
    mais alors ca sert a koi se bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		<selectKey keyProperty="id">
    			select LAST_INSERT_ID() as value
    		</selectKey>

  6. #6
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 870
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 870
    Par défaut
    Ca sert lorsque tu as insérer un objet Personne, de récupérer l'id nouvellement inséré.

Discussions similaires

  1. [N-Tier] Architecture 3 tier(spring , ibatis)
    Par blach dans le forum Autres
    Réponses: 1
    Dernier message: 14/02/2009, 00h39
  2. Réponses: 2
    Dernier message: 02/12/2008, 12h22
  3. [Data] [Spring][Ibatis] transactions non prise en compte
    Par nannous dans le forum Spring
    Réponses: 15
    Dernier message: 27/11/2007, 18h01
  4. [Data] [débutante][spring][ibatis] Error parsing XML
    Par stardust dans le forum Spring
    Réponses: 4
    Dernier message: 12/12/2006, 17h58

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