Java Hibernate错误IllegalArgumentException:要遍历的节点不能为null

Java Hibernate错误IllegalArgumentException:要遍历的节点不能为null,java,hibernate,cascading-deletes,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", f

我的
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();
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)
您定义了多个“查询根”(
Person p
DomainGroup g
),但删除查询只能有一个这样的根

你想要的是:

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
)

您定义了多个“查询根”(
Person p
DomainGroup g
),但删除查询只能有一个这样的根

你想要的是:

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
)


如果未在删除级联功能上使用
,则应在删除对象之前删除对该对象的所有引用

如果未在删除级联
功能上使用
,则应在删除对象之前删除对该对象的所有引用

这可能与瀑布有关吗?@pengibot你能详细解释一下吗?对不起,我只是想这可能是原因。听上去史蒂夫的答案是你问题的根源。这可能与cascades有关吗?@pengibot你能详细解释一下吗?对不起,我只是想这可能是原因。听上去史蒂夫的答案是你问题的根源。这行得通吗?将删除域组的“从域组g中删除,其中g.id=:groupId和:personId是g.coordinators的成员”。这就是你想要的吗?我不想要。我只想删除个人p的id,域组g,其中p.id是g.coordinators.的成员,这毫无意义。只是通过重复无效的查询来“回答”我的问题并不是真正的答案;)“删除身份证”是什么意思?很抱歉。让我解释一下,就好像我在用Postgres一样。我有一个表,“组协调人”。它有两列:用户名和组名。如果一行显示为“kevin,stackoverflow”,则表示我是stackoverflow组的管理员。我想编写一个查询,从group|U coordinators表中删除此“kevin | stackoverflow”行。@Entity DomainGroup有一个条目@JoinTable(name=“Group\u Coordinators”)。这个条目有效吗?将删除域组的“从域组g中删除,其中g.id=:groupId和:personId是g.coordinators的成员”。这就是你想要的吗?我不想要。我只想删除个人p的id,域组g,其中p.id是g.coordinators.的成员,这毫无意义。只是通过重复无效的查询来“回答”我的问题并不是真正的答案;)“删除身份证”是什么意思?很抱歉。让我解释一下,就好像我在用Postgres一样。我有一个表,“组协调人”。它有两列:用户名和组名。如果一行显示为“kevin,stackoverflow”,则表示我是stackoverflow组的管理员。我想编写一个查询,从group|U coordinators表中删除此“kevin | stackoverflow”行。@Entity DomainGroup有一个条目@JoinTable(name=“Group\u Coordinators”)。