java - 连接表上的 jooq 别名

标签 java postgresql jooq

我有 2 个连接的 SQL 表:

CREATE TABLE "B" (
    id BIGSERIAL PRIMARY KEY,
    lastname TEXT

);

CREATE TABLE "A" (
    id BIGSERIAL PRIMARY KEY,
    firstname TEXT,
    b_id BIGINT REFERENCES "B"(id),
);

我想请求它将数据填充到这个对象中:

public class A {
    public long id;
    public String firstname;
    pulic String lastname;
}

请求看起来像这样:

SELECT A.id AS id, A.firstname AS firstname, B.lastname AS lastname FROM A JOIN B ON a.b_id = B.id WHERE A.id = 42

但是,我不知道如何为表 B 的 SQL 字段 lastname 设置别名,以便能够填充对象属性 lastname 在类 A 中?

有可能做到吗?如果是,怎么办?

最佳答案

如果列已经与目标类中的属性相匹配,则不必为列设置别名。虽然 org.jooq.Result 中的列可能源自表 A 或表 BDefaultRecordMapper只会考虑用于映射的单个列名。您如何生成这些列名称并不重要。

A related discussion on the jOOQ User Group can be seen here .

所以下面的查询将立即生效:

DSL.using(configuration)
   .select(A.ID, A.FIRSTNAME, B.LASTNAME)
   .from(A)
   .join(B).on(A.B_ID.eq(B.ID))
   .where(A.ID.eq(42))
   .fetchInto(A.class)

当然,如果您觉得需要完全控制在 SQL 中生成的列名,只需使用 Field.as() 为它们添加别名即可。 :

DSL.using(configuration)
   .select(
        A.ID.as("id"), 
        A.FIRSTNAME.as("firstname"), 
        B.LASTNAME.as("lastname"))
   .from(A)
   .join(B).on(A.B_ID.eq(B.ID))
   .where(A.ID.eq(42))
   .fetchInto(A.class)

关于java - 连接表上的 jooq 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27775200/

相关文章:

sql - 比较两组数据

ruby-on-rails - 获取 PG::UndefinedFunction: ERROR in production

javascript - 有没有办法在 Op.op sequelize 中循环遍历许多参数的对象

java - jOOQ 将偏移日期时间返回为 Z(UTC),即使它不是

java - Spring 安全许可证全部不起作用

Java:为什么我的列表包含不同的类型? (过滤列表)

java - Java中的静态 block 未执行

java - JOOQ批量删除ID列表的记录

java - JOOq:更新通用表

java - Java泛型参数如何在被重写的方法中工作?