我正在jOOQ中执行一个普通的sql查询,并希望将其映射到jOOQ生成的pojo中。我希望我能做这样的事情:
public List<Foo> findFoos(final DateTime time) {
return db.resultQuery(loadSqlQuery("FooRepository_findFoos"), time)
.fetchInto(Foo.class);
}
然而,这是行不通的。字段不会映射到构建Foo
所需的类型,因为字段定义是DB列的定义,而不是FOO表的映射类型。目前我的代码看起来像这样:
public List<Foo> findFoos(final DateTime time) {
return db.resultQuery(loadSqlQuery("FooRepository_findFoos"), time)
.fetch(r -> {
return new Foo(
new FooId(r.getValue(FOO.ID, UUID.class)),
new BarId(r.getValue(FOO.BAR_ID, UUID.class))
//etc
);
});
}
是否有某种方法可以为结果查询提供我正在获取的字段列表
s,以便它能够正确映射结果?我希望在某个地方有这样的能力:
public List<Foo> findFoos(final DateTime time) {
return db.resultQuery(loadSqlQuery("FooRepository_findFoos"), time)
.fetch(FOO.fields())
.into(Foo.class);
}
但是我找不到它。这是我忽略的东西还是不支持的?
作为参考,我使用普通sql的原因之一是为了让间隔在PostgreSQL中工作。例如(不是真正的查询)
select
f.*
from foo f
where f.id not in (
select
x.foo_id
from bar x
where x.start_date >= (?::timestamptz - '1 year'::interval)
)
提前感谢。
jOOQ 3.12实现了#4473,它允许强制执行ResultQuery
你可以写:
public List<Foo> findFoos(final DateTime time) {
return db.resultQuery(loadSqlQuery("FooRepository_findFoos"), time)
.coerce(FOO)
.fetch();
}
您不必求助于所有普通SQL。您可以这样做:
public List<Foo> findFoos(final DateTime time) {
return db.select(FOO.fields())
.from("({0}) AS {1}",
DSL.sql(loadSqlQuery("FooRepository_findFoos"), time),
DSL.name(FOO.getName()))
.fetchInto(Foo.class);
}
您必须确保不生成任何模式名称,例如指定Settings.render模式=false
我有一个表tickets,其中插入ticket,并有一个createdBy字段,用于存储该记录创建者的UserId整数。在抓取过程中,我与users表和concat firstname和last name连接,并且我的DTO具有由连接的创建者名称创建的字段createdBy。如何映射派生字段?这是我的推荐信https://www.jooq.org/doc/3.13/manual/sql-execu
我尝试使用的将本机SQL查询映射到POJO类,如下所示: 然后,为了在创建本机查询时使用声明的结果集映射,我通过它的名称引用它: 但这对我不起作用,我得到以下错误:
我想我必须从POJO注册一个自定义转换器来记录。有人知道怎么做吗?
问题内容: 我有以下JSON表示盐请求的服务器响应: 我尝试使用以下POJO映射它: 现在每次我这样做: 该为空。如何使用Gson将JSON映射到POJO?我的变量顺序对Gson映射重要吗? 问题答案: 我的变量顺序对Gson映射重要吗? 不,不是这样。 如何使用Gson将JSON映射到POJO? 它是 区分大小写 和JSON字符串键应该是相同的POJO类使用的变量名。 您可以使用@Seriali
我有以下JSON来表示salt请求的服务器响应: 我尝试用以下POJO映射它: 每次我这样做: 为空。如何使用GSON将JSON映射到POJO?变量的顺序对Gson映射重要吗?