使用 JooQ 获取一对多关联
Fetching One to Many associations with JooQ
我正在尝试按照此 .
反序列化与 JooQ 的一对多关联(没有代码生成)
这是我的目标 类。
public class Author {
private Long id;
private String name;
private List<Book> books;
}
public class Book {
private String name;
}
我的JooQ查询如下:
dslContext
.select(table("authors").asterisk(),
field(
select(jsonArrayAgg(
jsonObject(
jsonEntry("name", field("books.name")))))
.from(table("books"))
.join(table("authors"))
.on(field("books.author_id").eq(field("authors.id")))
.where(field("emails.collection_case_id")
.eq(field("collection_cases.id")))
).as("books"))
.from(table("authors"))
.where(trueCondition())
.fetchInto(Author.class);
jsonObject()
方法对我来说不起作用。生成的 SQL 语句如下所示:
select authors.*, (select json_agg(json_build_object(?, books.name)) from books join authors ...
翻译后的 postgres 查询没有正确替换 json_build_object
的关键属性,这导致 SQL 异常。
PS:我正在使用 JooQ 3.14.0 和 postgres 11.5
虽然我无法使用各种 PostgreSQL 服务器和 JDBC 驱动程序版本重现此问题,但这里的简单解决方法是使用 DSL.inline(String)
来防止 jOOQ 为json_build_object()
函数参数:
jsonEntry(inline("name"), field("books.name"))
我正在尝试按照此
这是我的目标 类。
public class Author {
private Long id;
private String name;
private List<Book> books;
}
public class Book {
private String name;
}
我的JooQ查询如下:
dslContext
.select(table("authors").asterisk(),
field(
select(jsonArrayAgg(
jsonObject(
jsonEntry("name", field("books.name")))))
.from(table("books"))
.join(table("authors"))
.on(field("books.author_id").eq(field("authors.id")))
.where(field("emails.collection_case_id")
.eq(field("collection_cases.id")))
).as("books"))
.from(table("authors"))
.where(trueCondition())
.fetchInto(Author.class);
jsonObject()
方法对我来说不起作用。生成的 SQL 语句如下所示:
select authors.*, (select json_agg(json_build_object(?, books.name)) from books join authors ...
翻译后的 postgres 查询没有正确替换 json_build_object
的关键属性,这导致 SQL 异常。
PS:我正在使用 JooQ 3.14.0 和 postgres 11.5
虽然我无法使用各种 PostgreSQL 服务器和 JDBC 驱动程序版本重现此问题,但这里的简单解决方法是使用 DSL.inline(String)
来防止 jOOQ 为json_build_object()
函数参数:
jsonEntry(inline("name"), field("books.name"))