Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité régulier
    Inscrit en
    avril 2010
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : avril 2010
    Messages : 48
    Points : 7
    Points
    7

    Par défaut Hibernate : MySQLIntegrityConstraintViolationException: Duplicate entry '0' for key 'PRIMARY'

    Bonjour,

    je développe une application J2ee et j'utilise Hibernate 3.6

    J'ai un souci pour l'ajout d'un joueur à la base de données.

    voici le sql de ma table :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TABLE IF NOT EXISTS `joueurs` (
      `id` int(11) NOT NULL,
      `nom` varchar(100) NOT NULL,
      `prenom` varchar(100) NOT NULL,
      `age` int(3) NOT NULL,
      `taille` int(3) NOT NULL,
      `poids` int(3) NOT NULL,
      `poste` varchar(100) NOT NULL,
      `club` int(11) NOT NULL,
      PRIMARY KEY (`id`),
      KEY `club` (`club`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    (remplie ensuite par un script sql)


    voici ma fonction ajouterJoueur dans le dao pour l'ajout d'un joueur à la base :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void AjouterJoueur(Joueur monJoueur) {
    		// Récupération d'une session Hibernate
    		Session s = HibernateSessionFactory.getSession();
    		// Début de la transaction
    		Transaction t = s.beginTransaction();
    		s.save(monJoueur);
    		t.commit();
    		s.close();
    	}
    et ensuite ma classe joueur (qui possède une relation many-to-one sur la classe club) :

    Code :
    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
    @Entity
    @Table(name = "joueurs")
    public class Joueur implements Serializable {
     
    	/**
    	 * serialVersionUID
    	 */
    	private static final long serialVersionUID = 3148568044929607587L;
    	/**
    	 * int id
    	 */
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	@Column(name = "id")
    	private int id;
    	/**
    	 * String nom
    	 */
    	@Column(name = "nom")
    	private String nom;
    	/**
    	 * String prenom
    	 */
    	@Column(name = "prenom")
    	private String prenom;
    	/**
    	 * int age
    	 */
    	@Column(name = "age")
    	private int age;
    	/**
    	 * String poste
    	 */
    	@Column(name = "poste")
    	private String poste;
    	/**
    	 * int poids
    	 */
    	@Column(name = "poids")
    	private int poids;
    	/**
    	 * int taille
    	 */
    	@Column(name = "taille")
    	private int taille;
    	/**
    	 * String club
    	 */
    	@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, targetEntity = Club.class)
    	@JoinColumn(name = "club")
    	private Club club;
     
    [...]
    Et enfin l'exception problématique :

    Code :
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '0' for key 'PRIMARY'
    	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    	java.lang.reflect.Constructor.newInstance(Unknown Source)
    	com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    	com.mysql.jdbc.Util.getInstance(Util.java:386)
    	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1039)
    	com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
    	com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
    	com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
    	com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
    	com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
    	com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
    	com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427)
    	com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1980)
    	com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1451)
    	org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
    	org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
    	org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268)
    	org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
    	org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
    	org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
    	org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
    	org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
    	org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
    	org.esaip.composition.dao.JoueurDao.AjouterJoueur(JoueurDao.java:108)
    	org.esaip.composition.metier.JoueurMetier.AjouterJoueur(JoueurMetier.java:69)
    	org.esaip.composition.struts.AjoutJoueur.execute(AjoutJoueur.java:80)
    	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	java.lang.reflect.Method.invoke(Unknown Source)
    	com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
    	com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
    	com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
    	com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
    	org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    	com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    	com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    	com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
    	com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    	org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)
    	org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)
    J'ai recherché une solution sur internet et notamment sur ces forums mais à chaque solution proposée, je n'arrive toujours pas a le faire marcher.

    Je comprends bien que vu que je ne spécifie pas d'id, il essaye de l'insérer à 0 mais l'entrée 0 existe déja dans la base...

    Faut-il que je récupère l'id max déja créé et que je l'incrémente avant d'ajouter un joueur a la base ou hibernate est-il capable de faire automatiquement l'incrémentation sans que je m'en occupe ?

    un peu d'aide serait pas de refus

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    2 843
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 2 843
    Points : 3 338
    Points
    3 338

    Par défaut

    Bonjour, essaies de suivre ce lien

  3. #3
    Expert Confirmé
    Avatar de kolodz
    Homme Profil pro Patrick Kolodziejczyk
    Développeur informatique
    Inscrit en
    avril 2008
    Messages
    761
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrick Kolodziejczyk
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : avril 2008
    Messages : 761
    Points : 2 691
    Points
    2 691

    Par défaut

    Normalement, l'annotation :@GeneratedValue(strategy=GenerationType.AUTO)devrait faire l'incrémentation pour toi.

    Il est possible qu'il y a un problème de configuration, du coup.

    Cordialement,
    Patrick Kolodziejczyk.
    N'oubliez pas de marquer vos discussions
    Si une réponse vous a été utile pensez à voter Pour
    Pensez à la javadoc

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •