Mam następujące klasy domeny:Grails: znaleźć przez stowarzyszenie jeden-do-wielu sznurkiem
class User {
static hasMany = [roles:String]
}
chciałbym znaleźć każdemu użytkownikowi, który ma rolę ROLE_ADMIN
. Czy jest to możliwe dzięki dynamicznym wyszukiwarkom? user.findAllByRoles('ROLE_ADMIN')
wydaje mi się błąd.
UPDATE: jest to dość łatwe do kwerendy stowarzyszenie gdzie klasa A
ma listę klasa B
przypadkach i zarówno A
i B
są klasy domeny. Ale tutaj klasa A
jest klasą domeny, a klasa B
jest prostym łańcuchem Java.
Kod dla zapytań stowarzyszenie zawierający listę kolejnych obiektów domeny będzie wyglądać następująco:
`User.findAll { roles { role_name=='ROLE_ADMIN' } }`
Co szukam jest sposobem na określenie wartości ciągu, na przykład:
`User.findAll { roles {THIS_VALUE=='ROLE_ADMIN' }}`
UPDATE 2: o ile znalazłem, nie można używać kryteriów z kolekcjami typów pierwotnych. Jest możliwe użycie HQL choć:
User.findAll("from User a where :roles in elements(roles)",[roles:'ROLE_ADMIN'])
Jednak to nie jest tak usefull jako findAll
lub where
zapytania. Nie mogę połączyć metod findAll
w celu zdefiniowania innych metod, na przykład: uzyskanie ROLE_ADMIN
użytkowników o nazwie użytkownika takiej jak "xxx" wymaga przepisania całego zapytania HQL
. Być może możliwe jest wyrażenie powyżej stanu HQL
w postaci wyrażenia where
?
Jaki błąd dostałeś? Po prostu mówienie, że dostajesz, jest mniej niż użyteczne. – cdeszaq
Po prostu nie działa, podaje błąd dotyczący niepoprawnego zapytania do hibernacji (ten parametr nr 1 nie jest ustawiony) i widzę w zapytaniu 'where id =?', Dlatego myślę, że metoda 'findAllByRoles' nie miała żadnego efektu. Myślę, że musi istnieć inny sposób sprawdzania skojarzeń, które zawierają proste typy, takie jak 'String' – Pma
Sprawdź rozwiązanie przy użyciu kryteriów GORM tutaj: http://stackoverflow.com/a/24211973/3738761 –