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")
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top