Question

Entité client (entité mère)

@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é Facility (Entité enfant)

@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
...
}

dans l'entité de Customer, j'utilise CascadeType.ALL, mais lorsque je retire un client, les installations connexes sont toujours là. Supprimer customer par

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

@NamedQuery(name="Customer.delete", query="delete from Customer c where c.id = :id")
Était-ce utile?

La solution

en vrac supprimer les opérations ne sont pas montés en cascade, par spécification JPA:

  

4.10 Mise à jour et supprimer des opérations

     

...

     

Une opération de suppression applique uniquement aux   entités de la classe spécifiée et   ses sous-classes. Il ne cascade pas   entités liées.

     

...

Si vous souhaitez bénéficier de cascade, charger l'entité, puis appelez EntityManager#remove(Object) dessus.

Autres conseils

Essayez avec:

@Inject
EntityManager em;

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

toujours des opérations de cascades.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top