2011-12-27 22 views
6

Grails'de sol birleştirme yerine tam kayıtlar alma konusunda istekli olup olmadığını bulmaya çalışıyorum.Grails'de bütün rekoru almak isteyen var mı?

Birden çok eşleme ile iki sınıfım var. Tüm kayıtları almayı ve XML olarak oluşturmayı denediğimde, sadece "çok" tarafın kimlikleri XML dosyasına girer. Bütün kayıtları almak için zaten var mı? Ben 3 sınıfları

:

kullanıyorum örnek

aşağıdaki gibidir

Kullanıcı, Kitap ve Bölüm

Kullanıcılar ve Kitap Bölümler için birçok haritalama ve Defteri'ne bir çok var olan bir çok haritalama. Birçok ilişkiyi tanımlayan bir sınıf Kullanıcı Kitabım var. Şimdi aşağıdaki kod var

Yukarıdakiler kitaplarla birlikte bir XML ve her kitap için bölüm kimlikleri oluşturur. İstediğim şey, tüm bölüm bilgisini de içeren yukarıdaki "kitaplar" oldu.

Teşekkürler!

+0

Olabilir Sorularınızın daha iyi bir şekilde yanıtlanması için sınıflarınızın bir örneğini sunuyorsunuz? –

+0

Michael, Size önerdiğiniz gibi bir örnek verdim. Teşekkürler!! – iKT

cevap

2

docs section 5.3.4'a bakın. Bu size etki sınıfında fetchMode kullanılarak yapılır:

static fetchMode = [things:"eager"] 

Ancak, senin daha iyi performans için projection criteria kontrol edecek bir XML dosyası (veya başka bir alana) doldurmak için bir nesnenin sadece kimlikleri arayan eğer büyük koleksiyonlarda.

10

docs diyor ki:

varsayılan Grails tarafından kullanılan stratejiyi getirme koleksiyon lazily başlatılır , yani "tembel" dir. Bu, dikkatli değilseniz n + 1 sorununa yol açabilir. Eğer getirme "istekli" gerekirse orm DSL kullanabilir veya bir sorgunun parçası olarak getirilirken istekli belirtmek

Etki alanı sınıfında stratejiyi getirme belirtebilirsiniz, ancak IMHO, en iyi strateji bir 1'i edinmek için yapabilirsiniz Fetch Modu ile hazırda kriterlerini kullanarak diğer durumda

// You have a Book with many Authors, then you specify the fetching strategy with eager 
def results = Book.list(fetch:[authors:"eager"]) 

: örneğin, getirme veya Alan Sınıf veya kriterleri ilave yöntemlerle sorguda birleştirme ile -m ilişki

import org.hibernate.FetchMode as FM 
… 
def results = c.list { 
    maxResults(10) 
    firstResult(50) 
    fetchMode("aRelationship", FM.JOIN) 
} 

Veya daha iyi HQL biliyorsanız, o zaman kullanabilirsiniz, çünkü HQL, getirme belirtmek mümkündür, örneğin: def sonucu = DomainClass.findAll ("HQL_Sentence")

Serin uh !!!!

5

Eğer yerine yalnızca kimliği tam bölüm bilgilerini içeren marshalling 'derin' XML kullanarak denemek için XML çıktısı arıyorsanız (çok JSON için aynı şekilde çalışır):

XML.use('deep') { 
    render books as XML 
} 
İlgili konular