Doublons en base de données
Bonjour,
Je suis actuellement en train de me former sur les EJB3. J'utilise un serveur Jboss 4.0
Je réalise une application ou un auteur écrit des livres et un livre peut être écrit par plusieurs auteurs. J'ai réaliser une classe Livre ainsi qu'une classe Auteur ou l'on trouve une liste de livre.
J'ai crée :
- 2 auteurs : auteur1 et auteur2
- 2 livres : livre1 et livre2
- l'auteur 1 écrit le livre 1 et le livre 2
- l'auteur 2 écrit le livre 2
Lorsque je persiste mes deux auteurs (et uniquement mes auteurs), je me retrouve avec le livre 2 en doublon dans la base. J'utilise des mises à jour en cascade. Toutefois, je ne comprends pas pourquoi je retrouve deux fois dans la base une occurrence du même objet avec des identifiant différents.
Existe il une solution permettant de palier ce problème ?
Merci par avance
Laurent
Vous trouverez ci-dessous des éléments de mon code :
----- Classe Auteur -----
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
| @Entity
public class Auteur implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id = 0;
private String nom = "";
@OneToMany(cascade=CascadeType.ALL)
private Collection<Livre> lstLivre = new ArrayList<Livre>();
public Auteur(String nom) {
super();
this.id = 0;
this.nom = nom;
}
public Auteur() {
super();
this.id = 0;
this.nom = "";
}
/* get et set */
} |
----- Classe Livre -----
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
| @Entity
public class Livre implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String titre = "";
public Livre(String nom) {
super();
this.id = 0;
this.titre = nom;
}
public Livre() {
super();
this.id = 0;
this.titre = "";
}
/* get et set */
} |
----- Client -----
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class Client {
public static void main(String[] args) throws Exception {
Context ctx = new InitialContext();
ContratRemote p = (ContratRemote) ctx.lookup("ContratBean/remote");
Livre l1 = new Livre("livre 1");
Livre l2 = new Livre("livre 2");
Auteur a1 = new Auteur("auteur 1");
Auteur a2 = new Auteur("auteur 2");
a1.addLivre(l1);
a1.addLivre(l2);
a2.addLivre(l2);
p.recAuteur(a1);
p.recAuteur(a2);
} |
----- Base de données -----
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| mysql> select * from Livre;
+----+---------+
| id | titre |
+----+---------+
| 1 | livre 1 |
| 2 | livre 2 |
| 3 | livre 2 |
+----+---------+
3 rows in set (0.00 sec) |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| mysql> select * from Auteur;
+----+----------+
| id | nom |
+----+----------+
| 1 | auteur 1 |
| 2 | auteur 2 |
+----+----------+
2 rows in set (0.02 sec) |