【发布时间】:2014-07-04 01:00:50
【问题描述】:
我尝试编写一个 JPQL 查询,它会删除另一个实体集合中的所有实体。 (示例代码,没有getter/setter和注释)
class Aa implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String value;
}
@Entity
class A implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@JoinColumn(nullable = false)
@OneToOne
private Aa aa;
@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
private List<B> data;
}
@Entity
class B implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String value;
}
我尝试了以下方法:
DELETE FROM B b WHERE b.id IN(SELECT k.id FROM A a JOIN a.data k WHERE a.id = :id)
但它以外键违规异常结束。 另一种方法是
DELETE FROM B b WHERE EXISTS(SELECT a FROM A a WHERE a.id = :id)
但它也以违反外键而告终。
但是,如果我直接在数据库上执行 sql 查询,比如
DELETE FROM B WHERE id = <a id number here>
那么就不会出现错误了……
EntityManager.remove() 不是一个选项,因为我想删除大量数据。
感谢您的每一个回答和帮助。
【问题讨论】: