2011-10-05 3 views
8

J'ai une correspondance plusieurs-à-un sur les réservations. Une réservation doit appartenir à une chambre. Et une pièce peut avoir plusieurs réservations.Hibernate 3 Sur supprimer cascade

Si une pièce est supprimée, je souhaite également supprimer toutes les réservations sur cette pièce. Comment ferais-je cela en utilisant les annotations d'hibernation?

@Entity 
public class Booking implements Serializable{ 

    @Id @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private Date startDate; 
    private Date endDate; 
    private Date createdDate; 

    @ManyToOne 
    @JoinColumn (name = "roomId") 
    private Room room; 
... 
} 

Répondre

10

Dans votre entité Room vous pouvez avoir un

@OneToMany(cascade=CascadeType.REMOVE) 
private List<Booking> bookings; 
+0

Je n'ai pas une liste de réservations dans mon entité chambre. Et si possible, j'aimerais le garder comme ça. Y at-il un moyen de le faire sans introduire des réservations dans la salle? – user829237

+0

Non. Mais l'ajout de la collection ne vous coûte rien (il sera paresseux par défaut) – Bozho

3

Utilisez

@ManyToOne(cascade = CascadeType.REMOVE) 
+1

Cela supprimera la pièce quand une réservation est supprimée, ou elle essaiera sûrement et pourrait entraîner des violations de contraintes si la salle est associée à d'autres réservations. –

+0

Cela n'a pas fonctionné ... Toujours obtenir l'erreur de contrainte lorsque vous essayez de supprimer une pièce. – user829237

+0

@Andrei, Nous avons tous les deux tort ici parce que l'annotation plusieurs-à-un n'a pas de propriété orphelinEntrée. :) mais merci. Je n'ai pas fait attention que c'est Many-to-One je pensais que c'était one-to-many :) Je vais le supprimer plus tard :) +1 sur le commentaire –