客户实体(父实体)
@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")
答案 0 :(得分:2)
根据JPA规范,批量删除操作不是级联的:
4.10批量更新和删除操作
...
删除操作仅适用于 指定类的实体和 它的子类。它没有级联到 相关实体。
...
如果您想从级联中受益,请加载实体,然后在其上调用EntityManager#remove(Object)
。
答案 1 :(得分:0)
尝试:
@Inject
EntityManager em;
Customer customer =...;
em.remove(customer);
这总是级联操作。