假设我有一个如下模型
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开箱即用的可能的一般思路。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句