核心问题:如何正确地将查询中的信息提取到对象中?
想法
我在我的DAO中创建函数,这归结为以下查询:
select A.*, count(*)
from A
left join B on B.aId = A.aId
group by A.*
我正在寻找一种方法来创建一个jOOQ表达式,它只给我一个列表(或者一些我可以循环的东西),对象是A(pojo)和整数。
具体案例
在我的代码案例中:A=志愿者和B=志愿者匹配,我为每个志愿者存储几个匹配。B的主键是(自愿ID,自愿MatchId)。因此,这个查询会得到志愿者的信息以及匹配的数量。显然,这可以在两个单独的查询中完成,但我想把它作为一个查询来做!
问题
我找不到一个对象返回我的函数。我想得到像List这样的东西
我试过的
SelectHavingStep<Record> query = using(configuration())
.select(Volunteer.VOLUNTEER.fields())
.select(Volunteermatch.VOLUNTEERMATCH.VOLUNTEERID.count())
.from(Volunteer.VOLUNTEER)
.leftJoin(Volunteermatch.VOLUNTEERMATCH).on(Volunteermatch.VOLUNTEERMATCH.VOLUNTEERID.eq(Volunteer.VOLUNTEER.VOLUNTEERID))
.groupBy(Volunteer.VOLUNTEER.fields());
Map<VolunteerPojo, List<Integer>> map = query.fetchGroups(
r -> r.into(Volunteer.VOLUNTEER).into(VolunteerPojo.class),
r -> r.into(Volunteermatch.VOLUNTEERMATCH.VOLUNTEERID.count()).into(Integer.class)
);
问题是我用整数创建了一个列表。但这不是我想要的,我想要一个整数(计数将始终返回一行)。注意:我不想要解决方案“只创建自己的地图而不列出”,因为我的直觉告诉我jOOQ中有一个解决方案。我在这里学习!
我尝试过的2
SelectHavingStep<Record> query = using(configuration())
.select(Volunteer.VOLUNTEER.fields())
.select(Volunteermatch.VOLUNTEERMATCH.VOLUNTEERID.count())
.from(Volunteer.VOLUNTEER)
.leftJoin(Volunteermatch.VOLUNTEERMATCH).on(Volunteermatch.VOLUNTEERMATCH.VOLUNTEERID.eq(Volunteer.VOLUNTEER.VOLUNTEERID))
.groupBy(Volunteer.VOLUNTEER.fields());
Result<Record> result = query.fetch();
for (Record r : result) {
VolunteerPojo volunteerPojo = r.into(Volunteer.VOLUNTEER).into(VolunteerPojo.class);
Integer count = r.into(Volunteermatch.VOLUNTEERMATCH.VOLUNTEERID.count()).into(Integer.class);
}
但是,我不想在代码中返回result对象。在我调用这个函数的每个地方,我都在调用r.into(…)。变成(…)。在编译期间,如果返回整数或实pojo,则不会出现错误。我不希望这样做可以防止将来出现错误。但至少我想它没有列在清单上。
推理
任一选项可能都没问题,但是我有一种感觉,我在留档中错过了更好的东西。也许我可以适应(1)不要得到整数列表。也许我可以改变结果
如此接近!不要使用ResultQuery.fetch组()。使用ResultQuery.fetchMap()
代替:
Map<VolunteerPojo, Integer> map =
using(configuration())
.select(VOLUNTEER.fields())
.select(VOLUNTEERMATCH.VOLUNTEERID.count())
.from(VOLUNTEER)
.leftJoin(VOLUNTEERMATCH)
.on(VOLUNTEERMATCH.VOLUNTEERID.eq(VOLUNTEER.VOLUNTEERID))
.groupBy(VOLUNTEER.fields())
.fetchMap(
r -> r.into(VOLUNTEER).into(VolunteerPojo.class),
r -> r.get(VOLUNTEERMATCH.VOLUNTEERID.count())
);
这个问题是jOOQ的扩展:在单个对象中返回带有join、groupby和count的列表,但现在返回的是三个对象,而不是两个。 主意 具体示例 如何从查询中获取结果?
好日子,我被困在弄清楚如何从列表中获取单个对象,我做了谷歌,但所有主题都显示了如何返回带有排序对象或类似内容的。 我有一个 在java中,我会这样写 我怎样才能在kotlin中获得同样的结果?
我使用Nodejs,有一个对象包含一个object数组(API请求的结果)和一个简单的值数组。 它们看起来是这样的: 如何将包含对象数组的对象与简单数组进行比较? 我要找的是,从简单数组中获取ID,并将它们与另一个“复杂”对象进行比较,以检索属性以及简单数组中的相应ID和另一个对象属性,然后将结果存储在一个对象数组中。 简单来说,我希望有这样的结果: 当从API请求中检索“复杂”对象时,我尝试了以
我希望在每个数组中获取多个对象,但我的代码显示了单个对象的操作。下面是我的PHP代码,我如何添加另一个循环来获取多个对象 这是显示单个物体的结果
问题内容: 以下是gcc 4.4.4下的简单代码段错误 将最后一行更改为 工作良好。使用编译时,这两个版本均可使用。我是在简单地调用未定义的行为,还是在标准中进行了某些更改,从而使代码可以在C99下工作?为什么在C89下崩溃? 问题答案: 我相信C89 / C90和C99中的行为均未定义。 是数组类型的表达式,特别是。 C99 6.3.2.1p3说: 除非它是 sizeof 运算符或一元 & 运算
问题内容: 好的,所以我试图从我用来学习Java的书中进行练习。这是我到目前为止的代码: 以下是确切措词的练习: 修改类Calculator.java,以将所有数字按钮保留在声明为10个元素的数组中,如下所示: 替换从10开始的行 带有创建按钮并将其存储在此数组中的循环。 好的,所以我尝试使用声明数组,但这给了我错误: 这行有多个标记- 按钮无法解析为类型- 按钮无法解析为类型 相反,我尝试了这个