Bonjour,
J'espère que le titre est assez parlant.
Je précise que je bosse avec JPA2.0/EclipseLink déployer sur serveur glassfishV3.
J'ai déjà lu des choses à ce sujet, mais je ne trouve pas de solution, c'est pourquoi je me retourne vers vous.

Voilà j'ai une classe Groupe qui contient une liste de Client.

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
 
@Entity
@Table(name = "groupe")
public class Groupe implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "Id")
    private Integer id;
    .....
    @OneToMany(mappedBy="groupe",cascade=CascadeType.ALL)
    private List<Client> clients;
 
...constructeurs + getters/setters
et Voici la classe Client:
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
 
@Entity
@Table(name = "client")
public class Client implements Serializable {
 
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "Id")
    private Integer id;
....
    @JoinColumn(name = "idGroupe", nullable = true)
    @ManyToOne(cascade=CascadeType.ALL)
    private Groupe groupe;
.... constructeurs + getters/setters
J'ai donc créé les stateless EJB, les Controleurs et les jsp.

Dans la jsp de modification du groupe, je peux selectionner, avec des checkbox, les clients que je veux retirer du groupe puis je clique sur le commandButton qui me lance la mise à jour du groupe.

Une fois la mise à jour faites, j'ai bien les clients selectionnés qui sont retirés du groupe. Mais si je vais voir la liste des clients, et bien ceux que j'avais retiré du groupe sont toujours en relation avec le groupe.

Donc mon problème est: Comment propager la mise à jour des "many" lorsque l'on met à jour le "one" avec jpa?
Y a-t-il quelque chose que j'aurais zappé au niveau des annotations?
y a-t-il une configuration particulière à mettre en place?
Ou bien faut-il:
  • récupérer une autre instance de Groupe avec le meme id par un entityManager.find(Groupe.Class,groupe.getId())
  • comparer les listes de clients des 2 instances
  • modifier les clients qui ne correspondent pas


Je trouve assez bizarre que cela ne soit pas fait de base.
Merci par avance, j'ai passé la journée à chercher, j'ai lu que ce n'était pas possible avec JPA1.2, est-ce possible avec JPA2.0 ou je me coltine tout à la main?