2013-08-14 9 views
5

ho classi di dominio A e B come segue:GORM dove interrogazione su un oggetto incorporato

class A { 
    String prop1 
    String prop2 
    B prop3 

    static embedded = ['prop3'] 
} 

class B { 
    String prop4 
    String prop5 
} 

Quando voglio interrogare in questo modo:

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

ottengo la seguente eccezione:

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

sul "q def = A.where ..." linea.

Qualsiasi indizio qual è il problema? Ho controllato questo:

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

ma come "basta chiamare loro direttamente" non è del tutto chiaro per me. Qualunque altro modo di interrogare gli oggetti incorporati in GORM?

risposta

0

Che cosa si ottiene se (assumendo B è in src/groovy)

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

componenti integrati vengono mantenute all'interno della classe di dominio principale (proprietario) stesso. È possibile accedervi direttamente utilizzando qualsiasi strumento di ricerca dinamica come si fa direttamente su un oggetto dominio.

Quanto sopra può anche essere rappresentato in cercatori dinamiche come:

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

Non funziona: lo analizza ma ottengo zero risultati. Molto probabilmente perché manca il prop5 (che non conosco e non posso filtrare). Qualche altro suggerimento? Inoltre, come potrei fare una query "IN" su prop3? –

4

fine ho rinunciato sulla query dove e andato con l'approccio DetachedCriteria. Mi dà la stessa flessibilità delle query where, ma funziona con oggetti di dominio incorporati:

def criteria = new DetachedCriteria(A).build { 
    eq 'prop1', 'bla2' 
} 
criteria = criteria.build { 
    eq 'prop3.prop4', 'bla' 
} 
def list = criteria.list() 
+1

Una risposta più semplice potrebbe essere '' 'A.findAll {eq 'prop3.prop4', 'bla'}' '' – Faraway

+0

Assicurati di utilizzare grails.gorm.DetachedCriteria non quello nel pacchetto di ibernazione. – Neoecos

Problemi correlati