Java:Hibernate - 从多个表中删除的查询

时间:2009-08-19 16:26:52

标签: java mysql hibernate

我有两个表由外键连接,具有一对多的关系。

在实体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作为语言。

2 个答案:

答案 0 :(得分:2)

您可以使用本机查询,以下内容应该在mysql中使用:

delete a , b from a inner join b on a.id=b.a_id where ...

答案 1 :(得分:1)

您可以使用参数在删除级联上设置外键,这样当它引用的键被删除时,它所作为外键的所有行也将被删除。