Jpa 如何在EJB3中使用关系执行批量删除
我正在试图找出如何对@manytone关系执行批量删除,但迄今为止没有成功 情景: Parent有很多下载,我想删除所有下载,其中Parent日期为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
>: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中指定。