APP: Cuando quedó eliminado entidad matriz, entidad secundaria siguen siendo
Pregunta
Entidad Cliente (Entidad)
@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);
}
}
Instalación entidad (entidad secundaria)
@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
...
}
en la entidad Customer
, utilizo CascadeType.ALL
, sin embargo, cuando se quita un cliente, las instalaciones asociadas siguen ahí. Me customer
borrado por
Query query = em.createNamedQuery("Customer.delete");
query.setParameter("id", customerId);
query.executeUpdate();
donde
@NamedQuery(name="Customer.delete", query="delete from Customer c where c.id = :id")
Solución
granel operaciones de borrado no se conectan en cascada, según la especificación JPA:
4,10 granel Actualizar y Borrar
...
Una operación de eliminación sólo se aplica a las entidades de la clase especificada y sus subclases. No cascada para entidades relacionadas.
...
Si desea beneficiarse de cascada, la carga de la entidad y luego llamar EntityManager#remove(Object)
en él.
Otros consejos
Trate con:
@Inject
EntityManager em;
Customer customer =...;
em.remove(customer);
Esto siempre cae en cascada operaciones.