Jpa 如何在EJB3中使用关系执行批量删除

Jpa 如何在EJB3中使用关系执行批量删除,jpa,ejb-3.0,bulk,sql-delete,Jpa,Ejb 3.0,Bulk,Sql Delete,我正在试图找出如何对@manytone关系执行批量删除,但迄今为止没有成功 情景: Parent有很多下载,我想删除所有下载,其中Parent日期为>:some_date。我不想删除任何父记录,只想删除下载记录。下载有一个父字段,该字段使用@ManyToOne注释进行映射 我正试图在下载实体上使用@NamedQuery来实现这一点 //this OQL tries to delete from both the child and parent tables //I only want to d

我正在试图找出如何对@manytone关系执行批量删除,但迄今为止没有成功

情景:

Parent有很多下载,我想删除所有下载,其中Parent日期为
>:some_date
。我不想删除任何父记录,只想删除下载记录。下载有一个父字段,该字段使用@ManyToOne注释进行映射

我正试图在下载实体上使用@NamedQuery来实现这一点

//this OQL tries to delete from both the child and parent tables
//I only want to delete from the Download table
DELETE FROM Download dwn 
    WHERE dwn.acctId = :acctId AND dwn.parent.date > :date

//this OQL is invalid and will keep the bean from deploying
//The example I found used this sub query but with a @OneToMany relationship
//instead of a @ManyToOne relationship
//this is what i get for an error on deployment:
//"Errors in named queries: deleteByAccountIdAndDownloadedDate"
DELETE FROM Download dwn WHERE EXISTS 
    (SELECT p from dwn.parent WHERE p.date > :date) 
    AND dwn.acctId = :acctId

有什么建议吗?

我坚持第一种方法。是否显示任何错误消息


当涉及到与下载一起被删除的父记录时。。。你确定它们之间没有级联关系吗?

我坚持第一种方法。是否显示任何错误消息


当涉及到与下载一起被删除的父记录时。。。你确定没有对它们之间的关系进行级联吗?

我可以通过去掉@ManyToOne注释并用长parentId替换它来实现批量删除。然后,我将子选择更改为使用父名称而不是字段

现在OQL看起来像这样:

DELETE FROM Download dwn WHERE EXISTS 
    (SELECT p FROM Parent p WHERE p.id = dwn.parentId and p.date > :date)
我没有尝试过它(因为我不需要查询功能来完成我正在做的事情),但是如果可以,请将@ManyToOne保留在那里,并使用此OQL:

DELETE FROM Download dwn WHERE EXISTS 
    (SELECT p FROM Parent p WHERE p.id = dwn.parent.id and p.date > :date)

通过去掉@ManyToOne注释并用长parentId替换它,我能够使批量删除生效。然后,我将子选择更改为使用父名称而不是字段

现在OQL看起来像这样:

DELETE FROM Download dwn WHERE EXISTS 
    (SELECT p FROM Parent p WHERE p.id = dwn.parentId and p.date > :date)
我没有尝试过它(因为我不需要查询功能来完成我正在做的事情),但是如果可以,请将@ManyToOne保留在那里,并使用此OQL:

DELETE FROM Download dwn WHERE EXISTS 
    (SELECT p FROM Parent p WHERE p.id = dwn.parent.id and p.date > :date)

我将从我的DBA检查级联设置。请记住,级联可能在JPA级别(定义关系时)和/或DB中指定。我将从我的DBA检查级联设置。请记住,级联可能在JPA级别(定义关系时)和/或DB中指定。