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

JPA Java Discussion :

erreur dûe au fait que la clé composite existe déjà


Sujet :

JPA Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 726
    Points : 249
    Points
    249
    Par défaut erreur dûe au fait que la clé composite existe déjà
    Bonjour,
    cela fait une après midi que je suis bloqué sur une erreur

    J'utilise postgres, jpa, hibernate

    J'ai une table avec une clé composite. Je sauvegarde cette entité. Il y a une seule sauvegarde et j'ai le message d'erreur au moment où je sors de la méthode où je fait le save

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ERREUR: la valeur d(une clé dupliquée rompt la contrainte unique.... et plus loin Detail: la clé " (entity_id, commission_id)=(28, 4) " existe déjà
    J'ai vérifié
    - qu'il n'y a qu'un seul save
    - le code de cette entité
    - que la valeur n'existe pas en base

    Je suis bloqué de bloqué. Pouvez vous m'aider ?

    Voici le code

    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
     
    @Entity
    @Table(name = "ENTITY_COMMISSION")
    @NoArgsConstructor
    @AllArgsConstructor
    public class EntityCommission  implements Serializable {
     
        @EmbeddedId
        @NotNull
        private EntityCommissionId id = new EntityCommissionId();
     
        @ManyToOne
        @MapsId("commissionId")
        @NotNull
        private Commission commission;
     
        @ManyToOne
        @MapsId("entityId")
        @NotNull
        private EntityList entity;
     
     
     
    @NoArgsConstructor
    @AllArgsConstructor
    @Embeddable
    public class EntityCommissionId implements Serializable {
     
        private static final long serialVersionUID = 1L;
     
        @NotNull
        private Integer entityId;
        @NotNull
        private Integer commissionId;
     
     
     
     
    List<Commission> commissions = commissionRepository.findByNameList(commissionNames);
    EntityCommissionId entityCommissionId;
    EntityCommission entityCommission;
    for (Commission commission: commissions) {
    	entityCommissionId = new EntityCommissionId(entityList.getId(), commission.getId());
    	entityCommission = new EntityCommission(entityCommissionId, commission, entityList);
    	entityCommission = entityCommissionRepository.save(entityCommission);
    	entityList.getEntityCommissions().add(entityCommission);
    	entityList.getCommissions().add(entityCommission.getCommission());
    }

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 726
    Points : 249
    Points
    249
    Par défaut
    Re bonjour,

    auparavant, je faisais un save sur entityList

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    entityList = repository.save(entityList);
    j'ai trouvé ce qui n'allait pas

    quand je fait un save sur EntityCommission,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    entityCommission = entityCommissionRepository.save(entityCommission);
    après, j'éxécute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	entityList.getEntityCommissions().add(entityCommission);
    	entityList.getCommissions().add(entityCommission.getCommission());
    A la sortie de la méthode, l'appli fait un save sur entityList qui contient entityCommission et un save sur entityCommission et il s'appercoit que entityCommission a été sauvegardé 2 fois, une fois directement et une fois avec entityList, d'où l'erreur de duplicate key.

    La solution est de cloner entityList après l'avoir sauvegardé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    entityList = repository.save(entityList);
    entityList = clone(entityList)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/04/2009, 14h09
  2. Réponses: 5
    Dernier message: 15/05/2007, 23h18
  3. [VBA E]erreur incompatibilité de type que je ne comprend pas
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/07/2006, 15h14
  4. [9i]erreur de type alors que le type est le meme...
    Par hoaxpunk dans le forum Oracle
    Réponses: 12
    Dernier message: 01/02/2006, 18h45

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