在所有情况下,返回所有关联行的createAlias()解决方案均无效

|| 假定以下域对象:
UserChallenge {
  String invitationKind
}

ChallengeGroup {
  UserChallenge challenge
  UserGroup group
}

UserGroup {
  name
}
以下查询通过组关联(部分填充有匹配组)返回质询:
UserChallenge.withCriteria {
  eq(\'invitationKind\', \'GROUP\')
  groups {
    \'in\'(\'group.id\', visibleGroupIds)
  }
}
在帖子http://adhockery.blogspot.com/2009/06/querying-by-association-redux.html中,它建议使用createAlias()并修改上面的查询似乎可行:
UserChallenge.withCriteria {
  eq(\'invitationKind\', \'GROUP\')
  createAlias(\'groups\', \'g\')
  \'in\'(\'g.group.id\', visibleGroupIds)
}
但是,以下操作无效:
UserChallenge.withCriteria {
  or {
    eq(\'invitationKind\', \'OPEN\')
    and {
      eq(\'invitationKind\', \'GROUP\')
      createAlias(\'groups\', \'g\')
      \'in\'(\'g.group.id\', visibleGroupIds)
    }
  }
}
并且仅返回匹配可见组ID的挑战,而不返回\'OPEN \'的挑战。在哪里放置createAlias()调用似乎并不重要。 以下工作正常:
UserChallenge.withCriteria {
  or {
    eq(\'invitationKind\', \'OPEN\')
    and {
      eq(\'invitationKind\', \'GROUP\')
      groups {
        \'in\'(\'group.id\', visibleGroupIds)
      }
    }
  }
}
除了它返回仅具有匹配组的挑战(我正在尝试解决的原始问题)。     
已邀请:
尽管问题很老,但是遇到相同问题的任何人都可能会发现它很有用。使用分离标准查询是实现它的又一想法。根据问题中提供的信息,我尝试使用分离的条件查询来完成此任务。请在此处找到有关独立标准的更多信息
def userGroup = new DetachedCriteria(UserGroup).build {
        eq(\"group.id\", visibleGroupIds)
    }
    def getOb = UserChallenge.createCriteria()
    def listReturned = getOb.list {
        or{
            eq(\'invitationKind\', \'OPEN\')
            and {
                eq(\'invitationKind\', \'GROUP\')
                \"groups\" {
                    userGroup
                }
            }
        }
    }``
    

要回复问题请先登录注册