当前位置: 首页 > 知识库问答 >
问题:

Jooq:如何将记录映射到具有相同列名的Pojo类中?

胡劲
2023-03-14

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

}

共有1个答案

柯伟志
2023-03-14

你可以用这样的别名

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;
 类似资料:
  • 我有一个pojo类,我在其中使用Hibernate注释。在我的数据库中,我有两个模式相似的表。我想知道在hibernate注释中是否有任何方法可以将同一个pojo类用于这两个表。请告诉我怎么做。

  • 我有一个表tickets,其中插入ticket,并有一个createdBy字段,用于存储该记录创建者的UserId整数。在抓取过程中,我与users表和concat firstname和last name连接,并且我的DTO具有由连接的创建者名称创建的字段createdBy。如何映射派生字段?这是我的推荐信https://www.jooq.org/doc/3.13/manual/sql-execu

  • 我使用的是MySQL 5.7,我想将具有一对多关系的查询映射到其代表性记录的列表。 MySQL不支持多集,JSON仿真也不起作用,因为它无法在两个层次上引用别名。 我想知道是否有另一种方法可以让我尝试在一个查询中映射多个关系。

  • 我想我必须从POJO注册一个自定义转换器来记录。有人知道怎么做吗?

  • 如何定位图标的元素(在这种情况下显示地图内的范围),其id是未知的,也没有文本值。搜索面板上的那些图标有它们的静态类名。我试图实现CssSseltor和XPath。由于某种原因,CssSelector无法找到该元素,但XPath部分显示了一些结果。我想我将继续使用XPath。 该面板上的所有图标的类名前缀必须相同。说, > ux-row-action-项目hasGeoExt(类名称-在地图内显示范

  • 我在这里浏览了关于在Jooq中将记录提取到可变pojo中的文档。 它说列被映射到最佳匹配的构造函数、属性或setter。 谁能分享更多的信息最佳匹配属性或setter意味着什么?