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")
È stato utile?

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
scroll top