Bonjour,
dans le cadre d'un développement Web sous Netbeans :
EJB / JSF / Facelets / Glassfish.
j'ai un problème de liaison entre 2 tables (ManyToMany):
t_bookmarks n<>n t_tags
Je me suis aidé de ce topic :
http://www.developpez.net/forums/sho...ght=ManyToMany
mon problème se produit lors d'un ajout d'un bookmark, j'entre un bookmark dans un formulaire, je valide par un bouton "add" et je me retrouve dans mon bean.
mon bean utilise la session "bookmark" :
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 public class BookmarksManagementBean { @EJB private BookmarksFacadeLocal bookmarkFacade; private long id; // Primary key private String url; protected Collection<Tags> tags; public String addBookmark() { Bookmarks b = new Bookmarks(); Tags t = new Tags(); ArrayList al = new ArrayList(); // init new bookmark with forms b.setUrl(url); b.setTags(tags); // init new tag with static data t.setName("informatique"); al.add(t.getBmks()); t.setBmks(al); al = null; al = new ArrayList(); al.add(t); tags = al; b.setTags(tags); // insert data in database (t_bookmarks and t_tags) bookmarkFacade.create(b); } (...) }
et ma session utilise l'"entity class" suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 @Stateless public class BookmarksFacadeBean implements BookmarksFacadeLocal { @PersistenceContext private EntityManager em; public void create(Bookmarks bookmarks) { em.persist(bookmarks); } (...) }
Entity class "Tags" :
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 @Entity @Table(name="t_bookmarks") public class Bookmarks implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; // Primary key @Column(name = "url", unique = true, updatable = false, nullable = false, length = 256) private String url; @ManyToMany(cascade={CascadeType.PERSIST}, mappedBy="bmks") protected Collection<Tags> tags; (...)getter() and setter()(...) }
En résumé:
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 @Entity @Table(name="t_tags") public class Tags implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; // Primary key @Column(name = "name", unique = true, updatable = false, nullable = false, length = 64) private String name; @ManyToMany(cascade={CascadeType.PERSIST}) protected Collection<Bookmarks> bmks; (...)getter() and setter()(...) }
- je n'ai aucun message d'erreur sous l'explorateur et sous les logs.
- l'insertion s'effectue normalement dans la table "t_bookmarks".
- la collection de tags s'ajoute normalement aussi dans la table "t_tags".
Le problème :
- L'INSERTION DANS MA TABLE JOINTURE "t_bookmarks_t_tags" NE S'EFFECTUE PAS !
Merci d'avance.![]()
Partager