我有 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
或表 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)
关于java - 连接表上的 jooq 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27775200/