连接表上的jooq别名

时间:2015-01-05 07:38:25

标签: 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

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

是否可以这样做?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:0)

如果列已与目标类中的属性匹配,则不必为列添加别名。虽然org.jooq.Result中的列可能来自表A或来自表B,但DefaultRecordMapper只会考虑用于映射的各个列名。如何生成这些列名称并不重要。

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)