我正在尝试使用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
答案 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方法。