Kev*_*ith 1 java hibernate cascading-deletes
我的DELETE查询失败了.
这是我的代码:
String q = "SELECT p.id FROM Person p, DomainGroup g WHERE
p member of g.coordinators" + " AND g.id = :groupId
AND p.id = :personId";
List<Long> test = getEntityManager()
.createQuery(q).setParameter("groupId", followingId)
.setParameter("personId", followerId).getResultList();
log.debug("test = " + test);
String deleteGroupCoordinatorQuery =
"DELETE FROM Person p, DomainGroup g WHERE p member
of g.coordinators" + " AND g.id = :groupId
AND p.id = :personId";
List<Long> test = getEntityManager()
.createQuery(deleteGroupCoordinatorQuery).setParameter
("groupId", followingId)
.setParameter("personId", followerId).executeUpdate();
Run Code Online (Sandbox Code Playgroud)
输出:
test = [1,2,3]
2012-10-26 13:44:56,437 ERROR org.company.commons.server.service.ServiceActionController - Error occurred performing transaction. java.lang.IllegalArgumentException: node to traverse cannot be null!
at org.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:55)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:280)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
Run Code Online (Sandbox Code Playgroud)
您定义了多个"查询根"(Person p和DomainGroup g),但DELETE查询只能有一个这样的根.
你想要的东西:
delete Person p
where p.id in (
select c.id
from DomainGroup g
join g.coordinators c
where g.id = :groupId
and c.id = :personId
)
Run Code Online (Sandbox Code Playgroud)
要么
delete Person p
where p.id = :personId
and p.id in (
select c.id
from DomainGroup g
join g.coordinators c
where g.id = :groupId
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14811 次 |
| 最近记录: |