【问题标题】:Jooq: How map Record into Pojo class with the same column names?Jooq:如何将 Record 映射到具有相同列名的 Pojo 类?
【发布时间】:2019-12-30 11:17:02
【问题描述】:

我有两个表: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;

}

【问题讨论】:

标签: java mapping pojo jooq


【解决方案1】:

你可以像这样使用别名

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;

【讨论】:

  • 我需要一个动态查询,所以我不能使用列别名。我将尝试编写一个自定义 RecordMapper 来实现这一点。欢迎任何其他建议!
猜你喜欢
  • 2017-04-20
  • 2020-06-11
  • 2020-12-26
  • 2011-11-02
  • 1970-01-01
  • 2013-02-22
  • 2011-09-20
  • 1970-01-01
  • 2021-11-17
相关资源
最近更新 更多