Bonjour,
Je voudrai savoir pourquoi la méthode persist est appellée sur mes associations alors que je n'ai pas spécifié de cascade (je cherche même à les annuler, maladroiterment).
Mes classes :
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 @Entity @IdClass(ScoreId.class) public class Score implements Serializable { ... @Id @ManyToOne(cascade = {}) @JoinColumn(name = "id_ticket", insertable = false, updatable = false) @Cascade({}) // I don't want any cascade ! @NotNull public Ticket getTicket() { return ticket; } @Id @ManyToOne(cascade = {}) @Cascade({}) @JoinColumn(name = "id_user", insertable = false, updatable = false) @NotNull public User getUser() { return user; } public int getScore() { return score; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class ScoreId implements Serializable { private Integer ticket; private Integer user; // ... getter, setter, equals and hashcode ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 @Entity public class Ticket implements Serializable { @Id @GeneratedValue @Column(name = "id_ticket") public Integer getIdTicket() { return idTicket; } }Quand je sauvegarde mon objet Score (saveOrUpdate), il effectue préalablement un persist sur User et sur Ticket. Ceci provoque des erreurs de types "PersistentObjectException: detached entity passed to persist" car les instances sont issues d'autres sessions, fermées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 @Entity public class User implements Serializable { // ... @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id_user") public Integer getUserId() { return userId; }
Pourquoi la méthode persist est appelée ? Et comment l'éviter ?
Code du junit :
Merci,
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 @Test public void testSave() { User user = userDAO.findById(2); assertNotNull(user); Ticket ticket = ticketDAO.findById(6); assertNotNull(ticket); Score score = new Score(); score.setScore(3); score.setTicket(ticket); score.setUser(user); scoreDAO.save(score); // call hibernate.Session.saveOrUpdate }
Dush
Partager