içine iki tablonun katılmak getirebilir İki tablo arasında bir bağlantı yapmak istiyorum, örneğin USER
ve ROLE
, bu iki tablo için sonucu POJO'lara nasıl getirebilirim? ,jOOQ Ben mesela autogenerated bir jOOQ içine yapmam POJOs bir tablonun bir satırı çeker istiyorsanız jOOQ içinde, ilgili POJOs
cevap
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>
Cevabınız için teşekkürler. Ama sadece bunun “fetchLazy” ile nasıl birleştirilebileceğini merak ettiniz mi? –
@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 ... –
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,
nasıl kullanıcı ve rol bağlanır? Bire tane? Birçok bire? Birçok çoğa? –
çoktan çoğa, yani evet, bir tablo UserToRole da var –