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;
	}
}
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;
	}
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.
Pourquoi la méthode persist est appelée ? Et comment l'éviter ?

Code du junit :
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
	}
Merci,
Dush