Java JOOQ通过外键表获取
我有三张桌子:Java JOOQ通过外键表获取,java,sql,jooq,Java,Sql,Jooq,我有三张桌子: Users Keys UserKeys UserKeys表既有来自用户的主键,也有用于建立用户和键之间关系的键表 如何获取具有所有相关密钥的用户 如果存在其他表(例如UserRoles等),该怎么办?通常,如何通过外键表获取用户和所有相关行?使用标准SQL JOIN 我猜你用的是jOOQ的。编写联接就像在SQL中编写联接一样: ctx.select//(可选)在此处显式列出列 .来自用户 .joinUSER\u KEYS.onUSERS.ID.equaler\u KEYS.US
Users
Keys
UserKeys
UserKeys表既有来自用户的主键,也有用于建立用户和键之间关系的键表
如何获取具有所有相关密钥的用户
如果存在其他表(例如UserRoles等),该怎么办?通常,如何通过外键表获取用户和所有相关行?使用标准SQL JOIN
我猜你用的是jOOQ的。编写联接就像在SQL中编写联接一样:
ctx.select//(可选)在此处显式列出列
.来自用户
.joinUSER\u KEYS.onUSERS.ID.equaler\u KEYS.USER\u ID
.joinKEYS.onUSER_KEY.KEY_ID.eqKEYS.ID
.whereUSERS.NAME.eqsomething
取来
嵌套集合
如果存在其他表(例如UserRoles等),该怎么办?一般来说,如何获取用户和通过外键表关联的所有相关行
我不确定这是否还是同一个问题。上面的内容可能是关于如何进行连接的,这篇文章似乎更具体地介绍了如何获取嵌套集合
因为一旦连接多个对多个路径,连接总是会产生笛卡尔积,这是不可取的。从即将发布的JOOQ3.14开始,如果您的数据库支持,您可以使用SQL/XML或SQL/JSON作为解决方案。例如:
列出学生名单=
ctx.selectjsonObject
jsonEntryid,USERS.ID,
jsonEntryname,USERS.NAME,
jsonEntrykeys,现场
选择JSONARRAYAGJSONOBJECTKEYS.NAME、KEYS.ID
.Fromkey
.joinUSER\u KEYS.onKEYS.ID.equaler\u KEYS.KEY\u ID
.whereUSER\u KEYS.USER\u ID.equaler.ID
,
jsonEntryroles,现场
选择jsonarrayagjsonobjectroles.NAME、ROLES.ID
.来自角色
.joinUSER\u ROLES.onROLES.ID.equaler\u ROLES.ROLE\u ID
.whereUSER\u ROLES.USER\u ID.equaler.ID
.来自用户
.whereUSERS.NAME.eqsomething
.fetchIntoUser.class;
假设用户类如下所示,并且在类路径上有Gson或Jackson可以从JSON映射到Java数据结构:
类密钥{
长id;
字符串名;
}
阶级角色{
长id;
字符串名;
}
类用户{
长id;
字符串名;
列出键;
列出角色;
}
当然,您不必映射到Java数据结构并直接生成JSON结果,而无需进一步映射
请注意,JSON_ArrayAg将空集聚合为NULL,而不是空[]
使用多个查询
如果您不能使用上述方法,因为您还不能使用jOOQ 3.14,或者因为您的RDBMS不支持SQL/XML或SQL/JSON,那么您可以运行多个查询,并在您的终端手动组装结果。在jOOQ或SQL中?@jarlh jOOQ是我需要的