2016-03-25 8 views
1

Alt varlıkların bir özelliği tarafından GORM ölçütü sorgu filtrelemesi oluşturmaya çalışıyorum. Bu nedenle, bu tür varlıklar var: Belirli kategorilerle PaymentEntries'i seçmeye çalışıyorum. Şimdi de bu tür varlıklar var: Böyle bir şey çalışıyordu:Yuvalanmış hasOne varlık için GORM sorgu ölçütleri

burada
def c = PaymentEntry.createCriteria() 

def res = c { 
    'in'("category", categories) 
} 

categories önce seçilen PaymentCategory birimlerin bir listesidir.

Maalesef, bu başarısız oluyor. Grails NoSuchMethodException atar.

+0

Hangi Grails versiyonu? –

cevap

1

InList'e sahip olmalısınız. Bunu deneyin : bir takım sorunlar vardır

def res = c { 
    inList("category", categories) 
} 
0

. hasOne, bire bir associations içindir, ancak aslında bire çok var. Yani ilk adım muhtemelen böyle, dernek düzeltmek için geçerli:

class PaymentEntry { 

    static belongsTo = [category: PaymentCategory] 

    static constraints = { 
    category(nullable: true) 
    } 

    // other stuff 
} 

class PaymentCategory { 

    static hasMany = [payments: PaymentEntry] 

    // other stuff 
} 

yanında, bir ölçüt örneği sağladıktan sonra, inşa etmek ve sorguyu yürütmek için, list() gibi onun yöntemlerden birini aramam gerek. Eğer yaptığımız gibi bir Groovy anahtar olacağından, in alıntı aynı şeyin bir daha kısa versiyonu

def c = PaymentEntry.createCriteria() 

def res = c.list { 
    'in'("category", categories) 
} 

...

def res = PaymentEntry.withCriteria { 
    'in'("category", categories) 
} 
Hem in()

ve inList() sürece, sizin için kullanılabilir. Ölçüt sorguları here hakkında daha fazla bilgi edinebilirsiniz.

+0

Ancak PaymentCategory'de 'payments' alanına sahip olmak istemiyorum. Gerçekten buna ihtiyacım var mı? – amorfis

+0

Anlamadım. Bu mülkün zaten vardı. –