jooq的fetchmaps使用mysql返回时区数据

brjng4g3  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(193)

我有一个通过rest控制器返回数据的通用服务—下面是 Repository :

public List<Map<String, Object>> read(@NonNull final Table<?> table,
                                      @NonNull final Collection<Field<?>> fields,
                                      @NonNull final Collection<Condition> conditions,
                                      @NonNull final Integer offset,
                                      @NonNull final Integer limit,
                                      final SortField<?> sortField) {
    return dslContext
            .select(fields)
            .from(table)
            .where(conditions)
            .orderBy(sortField)
            .offset(offset)
            .limit(limit)
            .fetchMaps();
}

他回来了 List<Map<String, Object>> 包含mysql数据库中的数据。问题在于 datetime 字段-在db中,我们不存储时区,但返回 Object 属于类型 Timestamp 下面有 GregorianCalendar 给出 2018-07-05T00:00:00.000+0200 价值 2018-07-05 00:00:00.000 单位:db。它可能会添加默认时区(gmt+2)。
有没有办法简单地告诉jooq转换 datetime 以及 date 从db到 LocalDateTime 以及 LocalDate 而不是 Timestamp 以及 Date ?我知道它在底层使用jdbc,问题可能就在那里,但也许有一种聪明的方法可以解决这个问题。
我可以在额外的Map器中做一些instanceof检查,但是我想避免它,因为这会使代码更加困难,instanceof检查非常难看。
编辑:使用jooq3.9.5和java8。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题