Ho un oggetto dell'APP, che ha una relazione molti-a-molti in questo modo:Come utilizzare JPQL per eliminare le voci da una tabella di join?
@Entity
public class Role {
//...
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(
name="RolePrivilege",
joinColumns=
@JoinColumn(name="role", referencedColumnName="ID"),
inverseJoinColumns=
@JoinColumn(name="privilege", referencedColumnName="ID")
)
private Set<Privilege> privs;
}
non c'è un oggetto JPA per RolePrivilege, quindi non sono sicuro di come scrivere una query JPQL da eliminare voci dal campo privs di un oggetto ruolo. Ad esempio, ho provato questo, ma non funziona. Si lamenta che Role.privs non è mappato.
DELETE FROM Role.privs p WHERE p.id=:privId
non sono sicuro che altro per provare. Naturalmente potrei semplicemente scrivere una query nativa che cancella dalla tabella di join RolePrivilege. Ma sono preoccupato che farlo interagirebbe male con oggetti localmente memorizzati nella cache che non sarebbero stati aggiornati dalla query nativa.
È persino possibile scrivere JPQL per rimuovere le voci da una tabella di join come questa? Altrimenti, posso solo caricare tutti gli oggetti Ruolo e rimuovere le voci dalla collezione privata di ciascuno e quindi conservare ogni ruolo. Ma sembra sciocco farlo se una semplice query JPQL farà tutto in una volta.