如何在jOOQ中获取联接表结果?

时间:2016-01-08 13:19:50

标签: sql jooq

我在我的数据库中有一个小特例,我需要从两个不同的表中获取数据,这些表具有一对一的关系,以便获得有用的结果。 fetch看起来像这样:

SELECT 
  time_period.from_day, time_period.to_day, store_time_period.valid_for_days 
FROM time_period, store_time_period 
WHERE 
  -- .. condition

当然我在实际代码中使用JOIN - 这只是一个例子。我的问题是我是否以及如何将jOOQ中获取的数据写入POJO。我不确定是否有办法让jOOQ为我生成这个POJO,但如果我必须自己编写,我认为我需要类似适配器的东西,如org.jooq.Converter作为转换器对于数据类型。

我看到有RecordMapperProvider的可能性,但这似乎只能处理单个已知的表格。

那么,用jOOQ完成这样的事情的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以在不需要适配器或转换器的情况下获取(未生成的)POJO。有关示例,请参阅jOOQ在线文档中的this page

jOOQ会根据名称将查询中的列映射到POJO字段。名称不必与列名完全匹配; DefaultRecordMapper个文档some examples显示了如何忽略下划线和大小写。

在您的情况下,您专门创建POJO以获取这些结果。因此,您可以将POJO字段命名为与查询列相同。但是如果名称必须不同,您可以使用JPA注释告诉jOOQ哪个列放在每个字段中:

@Column(name = "TITLE")
public String myTitle;

(如果仍然不够好,至少有两种方法可以做到:你可以使用构造函数,或者将结果提取到HashMap中。)