我有两个表由外键连接,具有一对多的关系。
在实体A中我有以下内容:
@org.hibernate.annotations.Cascade( {
org.hibernate.annotations.CascadeType.ALL,
org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
@OneToMany(mappedBy="monitoredFlight", fetch = FetchType.LAZY)
@OnDelete(action=OnDeleteAction.CASCADE)
private List<bTable> BTable = new ArrayList<BTable>();
现在我尝试使用批量删除查询从表A中删除:
Query query = em.createQuery("delete from A where originDateTime<:date");
我得到外键约束错误。我决定使用连接进行删除,就像在mysql中一样,所以我将其更改为:
Query query = em.createQuery("delete from A join BTable where originDateTime<:date");
我遇到了语法错误。我尝试了几种有或没有连接的组合,没有任何作用;任何想法?
我使用mysql作为数据库,使用java作为语言。
答案 0 :(得分:2)
您可以使用本机查询,以下内容应该在mysql中使用:
delete a , b from a inner join b on a.id=b.a_id where ...
答案 1 :(得分:1)
您可以使用参数在删除级联上设置外键,这样当它引用的键被删除时,它所作为外键的所有行也将被删除。