@IdClass force le persist des objects associés
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:
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:
1 2 3 4 5
|
public class ScoreId implements Serializable {
private Integer ticket;
private Integer user;
// ... getter, setter, equals and hashcode ... |
Code:
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:
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:
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