Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jOOQ我可以将两个表的连接获取到各自的pojo中吗_Java_Jooq - Fatal编程技术网

Java jOOQ我可以将两个表的连接获取到各自的pojo中吗

Java jOOQ我可以将两个表的连接获取到各自的pojo中吗,java,jooq,Java,Jooq,在jOOQ中,如果我想将表中的一行提取到jOOQ自动生成的POJO中,我会这样做,例如: dsl.selectFrom(USER) .where(USER.U_EMAIL.equal(email)) .fetchOptionalInto(User.class); 现在,假设我想在两个表(例如用户和角色)之间进行连接,如何将结果提取到这两个表的POJO中?将POJO提取到映射中 这是一个使用 映射结果= dsl.selectUSER

在jOOQ中,如果我想将表中的一行提取到jOOQ自动生成的POJO中,我会这样做,例如:

dsl.selectFrom(USER)
                .where(USER.U_EMAIL.equal(email))
                .fetchOptionalInto(User.class);
现在,假设我想在两个表(例如用户和角色)之间进行连接,如何将结果提取到这两个表的POJO中?

将POJO提取到映射中 这是一个使用

映射结果= dsl.selectUSER.fields .selectROLE.fields .fromUSER .joinUSER\u TO_ROLE.onUSER.USER\u ID.equaler\u TO_ROLE.USER\u ID .joinROLE.onROLE.ROLE\u ID.equaler\u至\u ROLE.ROLE\u ID .whereUSER.U_EMAIL.equalemail .fetchGroups //首先将记录映射到用户表中,然后映射到键POJO类型中 r->r.intoUSER.intoUserPojo.class, //首先将记录映射到角色表中,然后映射到值POJO类型中 r->r.intoRolePojo.intoRolePojo.class ; 注意,如果您想在用户不一定有任何角色的情况下使用左联接,并且希望每个用户都有一个空列表,那么您必须自己将空角色转换为空列表

确保已在POJO上激活生成equals和hashCode,以便能够将它们作为键放入HashMap中:

符合事实的 使用自定义的分层POJO并将它们提取到嵌套集合中 一个经常重复出现的问题是如何在jOOQ中获取嵌套集合,即,如果结果数据结构如下所示,该怎么办:

类用户{ 长id; 字符串电子邮件; 列出角色; } 阶级角色{ 长id; 字符串名; } 从jOOQ 3.14开始,如果您的RDBMS支持它,您现在可以使用SQL/XML或SQL/JSON作为嵌套集合的中间格式,然后使用Jackson、Gson或JAXB将文档映射回Java类,或者保留XML或JSON(如果您首先需要的话)。例如:

列出用户= ctx.select USER.ID, USER.EMAIL, 领域 选择jsonarrayagjsonobjectrole.ID、ROLE.NAME .来自角色 .joinUSER\u TO_ROLE.onROLE.ROLE\u ID.equaler\u TO_ROLE.ROLE\u ID .whereUSER_TO_ROLE.USER.ID.equaler.ID .A角色 .fromUSER .whereUSER.EMAIL.eqemail .fetchIntoUser.class;
请注意,JSON_ArrayAg将空集聚合为NULL,而不是空[]

用户和角色是如何连接的?一对多?多对一?多对多?多对多,所以是的,有一个表UserToRole也可以作为答案。但我只是想知道这怎么能和偷懒结合起来?@Kango_V:说得好。这两个功能目前无法组合。我已为此创建功能请求:。当然,您可以将游标从fetchLazy转换为Java8流,然后使用collect对结果进行分组……这对于一对多关系是如何工作的?我们有一个功能表和一个层表,一个层可以有多个功能。因此,希望查询并获取输出,因为映射字节对应于一个tierID和一组功能名称。@user160108 use@LukasEder有效,如果有另一个查询,是否也可以映射到一对多关系的类似pojo的映射?