此实现的GORM目前不支持像[executeQuery]这样的基于字符串的查询

时间:2012-06-25 04:49:36

标签: security mongodb grails spring-security gorm

我正在尝试使用grails mongo插件在mongodb中保留spring-security-acl域对象。执行以下代码行时

aclUtilService.addPermission Phone.class, phoneInstance.id, new PrincipalSid(username), BasePermission.ADMINISTRATION

我收到了以下错误:

此实现的GORM目前不支持像[executeQuery]这样的基于字符串的查询。使用标准代替.. Stacktrace如下: 消息:此实现的GORM当前不支持像[executeQuery]这样的基于字符串的查询。改为使用标准。

有什么难事吗?

**Grails Configuration Details:**
app.grails.version=2.0.3
app.name=eateri
app.servlet.version=2.5
app.version=0.1
plugins.mongodb=1.0.0.RC5
plugins.spring-security-acl=1.1
plugins.spring-security-core=1.2.7.2 

1 个答案:

答案 0 :(得分:0)

正如@sudhir所提到的,aclService中有一些使用hql executeQuery方法的方法,如:

    protected AclObjectIdentity retrieveObjectIdentity(ObjectIdentity oid) {
        return AclObjectIdentity.executeQuery(
                "FROM AclObjectIdentity " +
                "WHERE aclClass.className = :className " +
                "  AND objectId = :objectId",
                [className: oid.type,
                 objectId: oid.identifier])[0]
        }

但mongodb gorm插件不支持hql,因此代码落入hql错误的调用路径如下:

  

aclUtilService.addPermission - > aclService.createAcl - >   retrieveObjectIdentity

另外两个使用hql的aclService方法:

  

deleteEntries,findChildren

因此,一个简单的解决方案是将ACL对象存储在mysql和enable hibernate working with mongodb gorm中。

另一个是用meta programming覆盖这3个aclService方法。