如何重新规范化规范化的SQL语句的结果?

时间:2016-04-20 20:15:05

标签: java sql denormalization

我需要将非规范化查询的结果重新规范化为类层次结构。

这不是我可以使用JPA的原因,因为查询很复杂并且需要Oracle特定的功能,例如查询提示,窗口函数等。

我提供了一个大规模简化的例子,但实际上会涉及更多的表和字段。

SELECT e.id,
       e.name,
       c.id,
       c.name
FROM      employee e
LEFT JOIN car      c ON e.id = c.employee_id;
|1|Robert Martin|1|BMW     |
|1|Robert Martin|2|Mercedes|
|2|Joshua Bloch |3|Lexus   |
|2|Joshua Bloch |4|Audi    |

我想重新规范化上面的表,持久层(在本例中为querydsl-sql)将作为List<Tuple>返回到下面的结构中。

public class Employee {
    private final long id;
    private final String name;
    private final List<Car> cars;
}

public class Car {
    private final long id;
    private final String name;
}

我能想到的最简单的方法是处理服务层中的数据,分离每个实体的字段并根据主键获取不同的字段 - 我将使用Java 8流API。

然而,这感觉就像编写和维护的许多脆弱,重复的代码/单元测试一样,并且是一个必须多次解决的问题。

是否有实现这一目标的最佳实践方法,或者某些流行的框架可以提供这种开箱即用的东西?

提前感谢您的反馈!

修改 如果没有任何更好的想法,我继续使用Java 8 Streams API重新规范化,利用mapCollectors.groupingBy。代码易于编写,读取良好且易于测试。

0 个答案:

没有答案