2012-06-25 10 views
6

Próbuję utrzymywać obiekty domenowe ACL w mongodbach przy użyciu wtyczki Grails Mongo. Podczas wykonywania następujący wiersz koduKwerendy oparte na łańcuchach, takie jak [executeQuery], nie są obecnie obsługiwane w tej implementacji GORM

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

Dostaję następujący błąd:

zapytania String oparte jak [executeQuery] nie są obecnie obsługiwane w tej realizacji GORM. Zamiast tego użyj kryteriów. Stacktrace: Wiadomość: Zapytania oparte na łańcuchach, takie jak [executeQuery], nie są obecnie obsługiwane w tej implementacji GORM. Zamiast tego użyj kryteriów.

Jakieś plotki?

**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 dla mongo db nie obsługuje zapytań HQL - aclUtilService.addPermission prawdopodobnie używa hql, co powoduje ten błąd –

+0

@sudhir Dzięki za odpowiedź! – Hari

+1

Czy doświadczasz tego podczas uruchamiania testów jednostkowych? Nie obsługuje zapytań w jednostce: – ACM64

Odpowiedz

0

Jak @sudhir wspomniano, istnieją pewne metody wykorzystujące metodę aclService executeQuery HQL, jak:

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

Ale wtyczki MongoDB gorm nie obsługuje HQL, dlatego ścieżka telefonicznej z którym kod spadek w HQL błędów jest jak:

aclUtilService.addPermission -> aclService.createAcl -> retrieveObjectIdentity

i dwie inne metody aclService użyciu HQL:

deleteEntries, findChildren

Prostym rozwiązaniem jest przechowywanie obiektów ACL w mysql i enable hibernate working with mongodb gorm.

Anther one ma na celu zastąpienie tych 3 metod aclService za pomocą meta programming.

Powiązane problemy