2016-07-06 27 views

cevap

12

Bu, bunun yerine LEFT JOIN kullanmak istiyorsanız, ResultQuery.fetchGroups(RecordMapper, RecordMapper)

Map<UserPojo, List<RolePojo>> result = 
dsl.select(USER.fields()) 
    .select(ROLE.fields()) 
    .from(USER) 
    .join(USER_TO_ROLE).on(USER.USER_ID.eq(USER_TO_ROLE.USER_ID)) 
    .join(ROLE).on(ROLE.ROLE_ID.eq(USER_TO_ROLE.ROLE_ID)) 
    .where(USER.U_EMAIL.equal(email)) 
    .fetchGroups(

     // Map records first into the USER table and then into the key POJO type 
     r -> r.into(USER).into(UserPojo.class), 

     // Map records first into the ROLE table and then into the value POJO type 
     r -> r.into(ROLE).into(RolePojo.class) 
    ); 

Not kullanarak tek çözümdür (Bir kullanıcı mutlaka herhangi bir rol yok durumda ve kullanıcı başına boş bir listesini almak istiyorum) NULL rollerini boş listelere kendiniz çevirmeniz gerekecek.

Bir HashMap olarak tuşları koyun edebilmek amacıyla da POJOs üzerinde equals() ve hashCode() üreten aktive emin olun:

<pojosEqualsAndHashCode>true</pojosEqualsAndHashCode> 
+0

Cevabınız için teşekkürler. Ama sadece bunun “fetchLazy” ile nasıl birleştirilebileceğini merak ettiniz mi? –

+0

@Kango_V: İyi nokta. Bu iki özellik şu anda birleştirilemez. Bunun için bir özellik isteği oluşturdum: https://github.com/jOOQ/jOOQ/issues/6046. Tabii ki, "İmleç" inizi ('fetchLazy()') bir Java 8 'Aktarımı 'na dönüştürebilir ve daha sonra sonuçları toplamak için' topla() 'yöntemini kullanabilirsiniz ... –

+0

bu birçoğuna nasıl çalışır? ilişki gemisi? Özellik Tablosuna ve Katman tablomuz var, 1 katman birden çok özelliğe sahip olabilir. Dolayısıyla, > bayt değeri bir sorgulayıcıya ve özellik adlarının listesine karşılık olarak sorgulamak ve çıktı almak istedi. – user160108