2012-06-25 7 views
6

Sto provando a persistere gli oggetti del dominio spring-security-acl in mongodb usando il plugin mongo di Grails. Durante l'esecuzione seguente riga di codiceLe query basate su stringhe come [executeQuery] al momento non sono supportate in questa implementazione di GORM

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

sto ottenendo seguente errore:

query String-based come [executeQuery] non sono attualmente supportate in questa implementazione di Gorm. Utilizzare invece i criteri. Stacktrace segue: Messaggio: query basate su stringhe come [executeQuery] non sono attualmente supportate in questa implementazione di GORM. Utilizza invece i criteri.

Qualsiasi ostacolo?

**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 per mongo db non supporta le query HQL - aclUtilService.addPermission utilizza probabilmente hql che causa questo errore –

+0

@sudhir Grazie per la risposta! – Hari

+1

stai riscontrando questo durante l'esecuzione di test unitari? Non ha supporto per le query nell'unità: – ACM64

risposta

0

Come @sudhir detto, ci sono alcuni metodi in aclService utilizzando il metodo HQL executeQuery, come:

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

Ma plug mongodb Gorm non supporta HQL, quindi il percorso di chiamata con la quale il codice di caduta in HQL errore è simile:

aclUtilService.addPermission -> aclService.createAcl -> retrieveObjectIdentity

E altri due metodi aclService utilizzando HQL:

deleteEntries, findChildren

Quindi, una soluzione semplice è quella di memorizzare gli oggetti ACL in mysql e enable hibernate working with mongodb gorm.

Un altro deve sovrascrivere questi 3 metodi aclService con meta programming.