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 Java : 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
@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 Java : 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
@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 Java : 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
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 : 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
mysql> select * from Livre;
 
+----+---------+
 
| id | titre   |
 
+----+---------+
 
|  1 | livre 1 | 
 
|  2 | livre 2 | 
 
|  3 | livre 2 | 
 
+----+---------+
 
3 rows in set (0.00 sec)

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
mysql> select * from Auteur;
 
+----+----------+
 
| id | nom      |
 
+----+----------+
 
|  1 | auteur 1 | 
 
|  2 | auteur 2 | 
 
+----+----------+
 
2 rows in set (0.02 sec)