2011-10-05 18 views
8

Ho una mappatura molti-a-uno sulle prenotazioni. Una prenotazione deve appartenere ad una stanza. E una stanza può avere diverse prenotazioni.Hibernate 3 On delete cascade

Se una stanza viene cancellata, vorrei che anche tutte le prenotazioni su quella stanza venissero cancellate. Come faccio a fare questo usando le annotazioni di ibernazione?

@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; 
... 
} 

risposta

10

Nella tua Room entità si può avere un

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

Non ho una lista di prenotazioni nella mia stanza entità. E se possibile vorrei mantenerlo in quel modo. C'è un modo per farlo senza introdurre prenotazioni nella stanza? – user829237

+0

No. Ma aggiungere la raccolta non ti costa nulla (per impostazione predefinita sarà pigro) – Bozho

3

Usa

@ManyToOne(cascade = CascadeType.REMOVE) 
+1

Questo rimuoverà la stanza quando verrà rimossa una prenotazione, o tenterà sicuramente di provocare violazioni dei vincoli se la stanza è associata ad altre prenotazioni. –

+0

Questo non ha funzionato ... Ancora ottenere l'errore di vincolo quando si tenta di eliminare una stanza. – user829237

+0

@Andrei, Entrambi abbiamo sbagliato qui perché l'annotazione molti-a-uno non ha la proprietà orphanRemoval. :) ma grazie. Non ho prestato attenzione al fatto che si tratta di molti a uno ho pensato che fosse uno-a-molti :) Lo eliminerò più tardi :) +1 sul commento –

Problemi correlati