Frage

Kunden Entity (Parent Entity)

@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);
}
}

Diese Struktur Entity (Child Entity)

@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 Einheit, ich CascadeType.ALL, aber wenn ich einen Kunden entfernen, die damit verbundenen Einrichtungen sind immer noch da. Ich lösche customer von

Query query = em.createNamedQuery("Customer.delete");
query.setParameter("id", customerId);
query.executeUpdate();

Dabei steht

@NamedQuery(name="Customer.delete", query="delete from Customer c where c.id = :id")
War es hilfreich?

Lösung

Bulk-Löschvorgänge nicht kaskadiert werden, pro JPA-Spezifikation:

  

4.10 Bulk-Update und Delete-Operationen

     

...

     

Ein Löschvorgang gilt nur für   Einheiten der angegebenen Klasse und   ihre Unterklassen. Dabei spielt es keine Kaskade   verbundene Unternehmen.

     

...

Wenn Sie profitieren von Cascading wollen, das Unternehmen laden und dann EntityManager#remove(Object) auf es nennen.

Andere Tipps

Versuchen Sie, mit:

@Inject
EntityManager em;

Customer customer =...;
em.remove(customer);

Dies ist immer Kaskaden-Operationen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top