Bonjour à tous les développeurs. J'ai un soucis, qui me surprends malgré tout.
Voici une annotation JPA dans un classe que j'ai appelé " Contribuable "
Cette annotation me permet d'exprimer une relation unidirectionnelle entre la classe Contribuable et la classe PieceIdentite (une PieceIdentite n'a donc pas connaissance de son propriétaire). Ceci marche bien entendu lors de l'insertion dans la base de données (persit) d'une entité de contribuable; Mais lors d'une mise à jour (merge), EclipseLink me renvoie l'erreur ci dessous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4@OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "idPieceIdentite", nullable = false) private PieceIdentite pieceIdentite;
il existe bien entendu une contrainte d'unicité sur le numéro d'une pièce d'identité. Pourquoi justement EclipseLink essaie t-il de faire une insertion dans cette table au lieu d'une mise à jour. Si je change le numéro de la pièce d'identité une nouvelle ligne est insérée dans la table concernée, alors que c'est une mise à jour qui est effectuée sur le contribuable. Pourquoi une nouvelle insertion lors d'une mise à jour ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 WARNING: DTX5014: Caught exception in beforeCompletion() callback: Local Exception Stack: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '497563529' for key 'UNQ_PIECEIDENTITE_0' Error Code: 1062 Call: INSERT INTO PIECEIDENTITE (ID, DATEDELIVRANCE, LIEUDELIVRANCE, NUMERO, TYPE) VALUES (?, ?, ?, ?, ?)Merci d'avance pour toute vos contributions.






Merci d'avance pour toute vos contributions.
Répondre avec citation





Partager