2013-08-14 18 views
5

mam zajęcia domen A i B, co następuje:GORM gdzie kwerendy na osadzonego obiektu

class A { 
    String prop1 
    String prop2 
    B prop3 

    static embedded = ['prop3'] 
} 

class B { 
    String prop4 
    String prop5 
} 

Kiedy chcę zapytać tak:

def q = A.where { prop3.prop4 == 'bla' } 
def list = q.list() 

pojawia się następujący wyjątek:

Cannot get property 'javaClass' on null object. Stacktrace follows: 

na linii "def q = A.where ...".

Jaka jest przyczyna problemu? Sprawdziłem to:

http://grails.1312388.n4.nabble.com/GORM-embedded-object-issue-td1379137.html

ale jak „po prostu do nich zadzwonić bezpośrednio” nie jest dla mnie jasne. Jakikolwiek inny sposób sprawdzania osadzonych obiektów w GORM?

Odpowiedz

0

Czego można dostać jeśli nie (zakładając, że B jest w src/groovy)

def q = A.where { prop3 == new B(prop4: 'bla') } 
def list = q.list() 

wbudowane elementy są zachowywane w głównej klasie domeny (właściciel) sam. Dostęp do niego można uzyskać bezpośrednio za pomocą dowolnego narzędzia dynamicznego wyszukiwania, tak jak robisz to bezpośrednio na obiekcie domeny.

Powyższe można również przedstawić w dynamicznych dystansu jako:

A.findAllByProp3(new B(prop4: 'bla')) 
+0

To nie działa - analizuje je, ale otrzymuję zero wyników. Najprawdopodobniej dlatego, że brakuje w nim prop5 (którego nie znam i nie mogę filtrować). Jakieś inne sugestie? Ponadto, jak mam zrobić zapytanie "IN" na prop3? –

4

końcu dało się w miarę zapytania i razem z podejściem DetachedCriteria. Daje mi tę samą elastyczność, co zapytania kwerend, ale działa z osadzonymi obiektami domeny:

+1

Prostszą odpowiedzią może być '' A.findAll {eq 'prop3.prop4', 'bla'} '' ' – Faraway

+0

Upewnij się, że używasz grails.gorm.DetachedCriteria, a nie tej w pakiecie hibernacji. – Neoecos

Powiązane problemy