7

grails mongo プラグインを使用して、mongodb で spring-security-acl ドメイン オブジェクトを永続化しようとしています。次のコード行の実行中

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

次のエラーが表示されます。

String-based queries like [executeQuery] are currently not supported in this  implementation of GORM. Use criteria instead.. Stacktrace follows:
Message: String-based queries like [executeQuery] are currently not supported in this implementation of GORM. Use criteria instead.

何か考えはありますか?

Grails 構成の詳細:

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 
4

1 に答える 1

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 を使用する他の 2 つの aclService メソッド:

deleteEntries、findChildren

したがって、これに対する簡単な解決策は、ACL オブジェクトを mysql に保存し、休止状態で mongodb gorm を使用できるようにすることです

もう 1 つは、これら 3 つの aclService メソッドをメタ プログラミングでオーバーライドすることです。

于 2013-01-10T04:22:21.377 に答える