我有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
}}?
是否可以这样做?如果是这样,怎么样?
答案 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)