Bonjour à tous,
J'ai un problème de modification de données en utilisant Spring et Hibernate. Je m'explique :
J'ai trois objets (pour faire simple) : un objet Equipe, un objet Utilisateur et un objet Chrono. Voici l'implémentation de l'équipe sachant que les deux autres sont plus simples :
Voici mon DAO :
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 @Entity() @Table(name = "team") public class Team implements Serializable { private static final long serialVersionUID = 654975530626725829L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private Long id; @Column(name = "name") private String name; @Column(name = "creation", nullable = false) private Date creation = new Date(); @ManyToOne() @JoinColumn(name = "trainer", nullable = false) private User trainer; @ManyToOne() @JoinColumn(name = "category", nullable = false) private Category category; @ManyToOne() @JoinColumn(name = "equipment") private Equipment equipment; @LazyCollection(LazyCollectionOption.FALSE) @OneToMany(cascade = {CascadeType.ALL}, mappedBy = "team") private List<Chrono> chonos; @ManyToMany @LazyCollection(LazyCollectionOption.FALSE) @JoinTable(name = "team_user",joinColumns = {@JoinColumn(name = "team")},inverseJoinColumns = {@JoinColumn(name = "user")}) private List<User> trainedUsers;
et mon service :
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 public class TeamDAO implements ITeamDAO , Serializable { private static final long serialVersionUID = 376556662034995161L; private SessionFactory sessionFactory; /** * Get Hibernate Session Factory * * @return SessionFactory - Hibernate Session Factory */ public SessionFactory getSessionFactory() { return sessionFactory; } /** * Set Hibernate Session Factory * * @param SessionFactory * - Hibernate Session Factory */ public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public void add(Team team) throws HibernateException { this.sessionFactory.getCurrentSession().save(team); } @Override public void update(Team team) throws HibernateException { this.sessionFactory.getCurrentSession().update(team); }
Mon problème est le suivant : quand je crée une équipe avec des utilisateurs, tout va bien. Quand j'ajoute un chrono à mon équipe, tout va bien. Mais quand j'ajoute un utilisateur dans mon équipe (ajout dans la liste puis update), j'obtiens un nouvel objet avec les chronos et les utilisateurs et l'ancien perd les chronos et les utilisateurs.
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 @Transactional(readOnly = true) public class TeamService implements ITeamService { private static final long serialVersionUID = -3580420360675832960L; private ITeamDAO teamDAO; public ITeamDAO getTeamDAO() { return teamDAO; } public void setTeamDAO(ITeamDAO teamDAO) { this.teamDAO = teamDAO; } // @Override @Transactional(readOnly = false) public void add(Team team) throws HibernateException { this.teamDAO.add(team); } @Override @Transactional(readOnly = false) public void update(Team team) throws HibernateException { this.teamDAO.add(team); }
Déjà, je ne vois pas pourquoi il recrée un objet alors qu'il devrait simplement ajouter les utilisateurs et c'est tout...
Avez vous une idée pour moi ?
Merci d'avance.
Partager