在jOOQ如果我想取表的行插入jOOQ自動生成的POJO我做的,比如:jOOQ我可以取一兩個表的連接到各自的POJO
dsl.selectFrom(USER)
.where(USER.U_EMAIL.equal(email))
.fetchOptionalInto(User.class);
現在,假設我想在兩個表之間進行連接,例如USER
和ROLE
,我如何將結果提取到這兩個表的POJO中?
在jOOQ如果我想取表的行插入jOOQ自動生成的POJO我做的,比如:jOOQ我可以取一兩個表的連接到各自的POJO
dsl.selectFrom(USER)
.where(USER.U_EMAIL.equal(email))
.fetchOptionalInto(User.class);
現在,假設我想在兩個表之間進行連接,例如USER
和ROLE
,我如何將結果提取到這兩個表的POJO中?
這是使用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)
);
注意,如果你想使用LEFT JOIN
,而不是一個解決方案(情況下,用戶並不一定有什麼作用,你想獲得每個用戶一個空列表),您必須自己將NULL
角色翻譯爲空列表。
確保您已激活產生對你的POJO equals()
和hashCode()
爲了能夠把它們放在一個HashMap
作爲關鍵字:
<pojosEqualsAndHashCode>true</pojosEqualsAndHashCode>
謝謝你的答案。但只是想知道這可以與'fetchLazy'結合嗎? –
@Kango_V:好點。這兩個功能目前不能組合。我爲此創建了一項功能請求:https://github.com/jOOQ/jOOQ/issues/6046。當然,您可以將'Cursor'(從'fetchLazy()')轉換爲Java 8'Stream',然後使用'collect()'將結果分組... –
這對一對多關係?我們有一個功能表和一個層表,1層可以有多個功能。因此想要查詢並獲取輸出爲Map
如何用戶和角色有聯繫嗎?一到多少?許多到一個?許多一對多? –
多對多,所以是的,有一個表UserToRole –