客户实体(父实体)

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

设施实体(儿童实体)

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

Customer实体,我用CascadeType.ALL,但是当我删除客户,相关的设施仍然存在。我删除customer通过

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")
有帮助吗?

解决方案

批量删除操作不是级联,每JPA规范:

  

4.10批量更新和删除操作

     

...

     

一个删除操作仅适用于   指定类的实体和   它的子类。它不级联到   相关实体。

     

...

如果您想从级联的利益,加载实体,然后调用它的EntityManager#remove(Object)

其他提示

尝试用:

@Inject
EntityManager em;

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

此总是级联操作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top