2012-06-25 3 views
6

Ich versuche, feed-security-acl Domänenobjekte in Mongodb mit Grails Mongo-Plugin persistent zu bleiben. Während folgende Codezeile ausführenString-basierte Abfragen wie [executeQuery] werden derzeit in dieser Implementierung von GORM nicht unterstützt

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

ich folgende Störung zu erhalten:

String-basierte Abfragen wie [executeQuery] sind derzeit nicht in dieser Implementierung von GORM unterstützt. Verwenden Sie stattdessen Kriterien. Stacktrace folgt: Nachricht: String-basierte Abfragen wie [executeQuery] werden derzeit in dieser Implementierung von GORM nicht unterstützt. Verwenden Sie stattdessen Kriterien.

Irgendwelche Toughts?

**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 
+5

GORM für Mongo db unterstützt keine HQL-Abfragen - aclUtilService.addPermission verwendet wahrscheinlich hql, was diesen Fehler verursacht –

+0

@sudhir Vielen Dank für Ihre Antwort! – Hari

+1

erfahren Sie dies beim Ausführen von Komponententests? Es unterstützt keine Abfragen in der Einheit: – ACM64

Antwort

0

Wie @sudhir erwähnt, gibt es einige Methoden in aclService hql executeQuery Methode verwendet, wie:

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

Aber mongodb gorm Plugin nicht hql unterstützen, damit der Angerufene Weg, mit dem Sie Ihren Code fallen Fehler in hql ist wie:

aclUtilService.addPermission -> aclService.createAcl -> retrieveObjectIdentity

und zwei weitere aclService Methoden hql:

deleteEntries, findChildren

Also, eine einfache Lösung ist, ACL-Objekte in mysql und enable hibernate working with mongodb gorm zu speichern.

Anthere ist, diese 3 aclService-Methoden mit meta programming zu überschreiben.