首页 > 解决方案 > Jooq:如何将 Record 映射到具有相同列名的 Pojo 类?

问题描述

我有两个表:TABLE_A 和 TABLE_B,它们有一些同名的列。

TABLE_A (ID, NAME, ADDRESS)<br>
TABLE_B (ID, NAME)

我想从两个表中检索所有列,并使用 Jooq 将查询结果转换为 Pojo 类,如下所示:

List<MyPojo> result = query.select()
                         .from(TABLE_A)
                         .join(TABLE_B)
                         .on(TABLE_A.ID.equal(TABLE_B.ID))
                         .fetchInto(MyPojo.class);

我想用@Column注解来指定哪一列来自哪张表,但是好像Jooq不支持这个功能。我该如何实现呢?

import javax.persistence.Column;

public class MyPojo {

    @Column(table = "TABLE_A", name = "ID")
    private String idA;

    @Column(table = "TABLE_A", name = "NAME")
    private String nameA;

    @Column(table = "TABLE_A", name = "ADDRESS")
    private String addressA;

    @Column(table = "TABLE_B", name = "ID")
    private String idB;

    @Column(table = "TABLE_B", name = "NAME")
    private String nameB;

}

或这个,

import javax.persistence.Column;

public class MyPojo {

    @Column(name = "TABLE_A.ID")
    private String idA;

    @Column(name = "TABLE_A.NAME")
    private String nameA;

    @Column(name = "TABLE_A.ADDRESS")
    private String addressA;

    @Column(name = "TABLE_B.ID")
    private String idB;

    @Column(name = "TABLE_B.NAME")
    private String nameB;

}

标签: javamappingpojojooq

解决方案


你可以像这样使用别名

query.select(
   concat(TABLE_A.NAME).as("Aname")
   ...)
  .from(TABLE_A)
  .join(TABLE_B).on(TABLE_A.ID.equal(TABLE_B.ID))
  .fetchInto(MyPojo.class);

并使用带有注释的 Pojo

 @Column(name = "Aname")
    private String table_A_name;

推荐阅读