JPA: Quando l'entità genitore è stata rimossa, l'entità figlio rimane ancora
Domanda
Entità cliente (entità madre)
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@OneToMany(mappedBy="customer", cascade=CascadeType.ALL)
private List<Facility> facilities;
//Setter and Getter for name and facilities
public void addFacility(Facility facility){
if(this.facilities == null){
this.facilities = new ArrayList<Facility>();
}
this.facilities.add(facility);
facility.setCustomer(this);
}
}
Entità della struttura (entità infantile)
@Entity
public class Facility {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne
@JoinColumn(name="CUSTOMER_FK")
private Customer customer;
private String name;
//Setter and Getter, equals and hashcode
...
}
in Customer
entità, uso CascadeType.ALL
, tuttavia, quando rimuovo un cliente, le strutture associate sono ancora lì. cancello customer
di
Query query = em.createNamedQuery("Customer.delete");
query.setParameter("id", customerId);
query.executeUpdate();
dove
@NamedQuery(name="Customer.delete", query="delete from Customer c where c.id = :id")
Soluzione
operazioni di eliminazione di massa non sono in cascata, secondo la specifica JPA:
4.10 Bulk operazioni UPDATE e DELETE
...
Un'operazione di cancellazione si applica solo alle entità della classe specificata e le sue sottoclassi. Non cascata entità correlate.
...
Se si desidera beneficiare di cascata, caricare l'entità e quindi chiamare EntityManager#remove(Object)
su di esso.
Altri suggerimenti
Prova con:
@Inject
EntityManager em;
Customer customer =...;
em.remove(customer);
Questa Cascades sempre le operazioni.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow