gpt4 book ai didi

java - 从连接查询中读取嵌套对象的最佳方法是什么

转载 作者:行者123 更新时间:2023-11-30 11:10:45 25 4
gpt4 key购买 nike

假设我有一个像下面这样的模型

class Chest {
public Id id;
public List<Drawer> drawers;
public Price price;
}

class Drawer {
public Id id;
public Price price;
}

还有一个 JOOQ 查询来获取一个带有抽屉的 Chest 对象:

dsl.selectFrom(CHEST.join(DRAWERS).onKey()).where(CHEST.ID.eq(1)).fetch()

根据上述查询结果构造 Chest 对象的最佳方法是什么?

谢谢。

最佳答案

一般来说,使用 JOIN 来具体化对象图不会很好地工作,因为在您尝试再次规范化数据映射算法。 JPA 通过提供一种不会公开太多 SQL 功能的替代查询语言来向您隐藏这些内容。

然而,在您的特定情况下,您可以使用 Result.intoGroups() 通过 jOOQ API 运行它。方法。因此:

Map<Record, Result<Record>> result = 
dsl.selectFrom(...).fetch().intoGroups(CHEST.fields());

List<Chest> list = new ArrayList<>();
for (Entry<Record, Result<Record>> entry : result.entrySet()) {
Record chest = entry.getKey();
Result<Record> drawers = entry.getValue();

list.add(new Chest(
chest.into(Id.class), // These into(Class<?>) methods assume that you
drawers.into(Drawer.class) // want to use jOOQ's DefaultRecordMapper
));
}

上述算法可能不完整,或者不完全是您需要的。但它会让您大致了解通过 jOOQ API 开箱即用的可能性。

关于java - 从连接查询中读取嵌套对象的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27611604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com