Domanda

L'obiettivo è quello di rimuovere tutti i dipendenti quando il loro proprietario viene eliminato. Ho le seguenti classi:

@Entity
class Dependent {    
    @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY, optional = false)
    @Column(name = "OWNER")
    private Owner _owner;
}

@Entity
class Owner {
...
}

Nell'implementazione corrente Dipendente esistono ancora dopo il suo proprietario è stato cancellato.

Il proprietario non ha nessun link a dipendenti e non può essere modificata, quindi non posso usare @Dependent annotazione o cascade = CANC.

sono supportati da JPA tale "dipendenza inversa"? Un'altra questione è quello che fa opzionale = garanzia "falsa", mentre il _owner campo viene cancellato?

È stato utile?

Soluzione

Sono disponibili due opzioni: È necessario aggiungere una sacchetto / set / list per la Owner classe con cascade-delete. È possibile effettuare questa lazy bag e mai accedervi, in modo da non avere un impatto sulle prestazioni fino a quando si elimina.

L'altra opzione è quella di eliminare le istanze Dependent con una query quando si elimina il proprietario. Dal momento che JPA non fa garbage collection automatica dei casi, è necessario avviare il elimina manualmente in ogni caso, quindi basta assicurarsi che ogni utilizza una singola funzione per eliminare i proprietari e quindi aggiungere la chiamata per eliminare i bambini lì.

Altri suggerimenti

Un modo per risolvere questo problema è utilizzare una sottoclasse che condividono le stesse tabelle come proprietario di e aggiungere una collezione che punta al dipendente. Io non sono d'accordo con il punto di Aaron Digulla su 'opzionale = false', questa affermazione solo mostra l'Assocation è opzionale, e perché non ha avuto l'assocation bidrectional, in modo che il dipendente di gestire sempre la mappatura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top