假设我有一个类似以下的模型
class Chest {
public Id id;
public List<Drawer> drawers;
public Price price;
}
class Drawer {
public Id id;
public Price price;
}
使用抽屉获取Chest对象的JOOQ查询:
dsl.selectFrom(CHEST.join(DRAWERS).onKey()).where(CHEST.ID.eq(1)).fetch()
从上面的查询结果构建Chest对象的最佳方法是什么?
感谢。
答案 0 :(得分:1)
通常,使用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可以开箱即用的东西。