Logo_Hibernate

Lorsqu’on travaille avec Hibernate et JPA il est fréquent de voir un mix d’annotations Hibernate et JPA et cela peux entraîner plusieurs erreurs.

Voici une erreur rencontré sur la notion de Cascade et comment s’en sortir.

...
import javax.persistence.CascadeType;
...

@Entity
@Table(name = "T_TEAM")
public class Team implements Serializable {
 ...
 @OneToMany(fetch = FetchType.LAZY, mappedBy = "team", cascade = { CascadeType.REMOVE })
 private List<User> members;
 ...
}

La relation @OneToMany est une annotation JPA
Lorsque l’on va mettre à jour la donnée, Hibernate va regarder ses propres valeurs et ne fera donc aucun traitement en cascade.
Il faut donc remplacer la cascade JPA par l’annotation @Cascade de Hibernate.

...
import org.hibernate.annotations.CascadeType;
...

@Entity
@Table(name = "T_TEAM")
public class Team implements Serializable {
 ...
 @OneToMany(fetch = FetchType.LAZY, mappedBy = "team")
 @Cascade({ CascadeType.DELETE })
 private List<User> members;
 ...
}

MàJ : les nouvelles versions d’Hibernate supportent tous les types de cascade JPA

Publicités