Jooq的fetchMaps使用MySQL返回时区数据

时间:2018-09-11 08:29:53

标签: java mysql sql jooq

我有一个通用服务,该服务通过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字段中-在数据库中,我们不存储时区,但返回的Object类型为Timestamp,其类型为GregorianCalendar,它为2018-07-05T00:00:00.000+0200提供了值2018-07-05 00:00:00.000(以db为单位)。它可能会添加默认时区(格林尼治标准时间+2)。

有没有一种方法可以简单地告诉jOOQ将db中的datetimedate字段从db转换为LocalDateTimeLocalDate而不是Timestamp和{{1 }}?我知道它在下面使用了JDBC,问题可能在那里,但也许有解决此问题的聪明方法。

我可以在其他映射器中执行一些instanceOf检查,但想避免这样做,因为这会使代码更加困难,而instanceOf检查却很丑陋。

编辑: 使用jooq 3.9.5和Java 8。

0 个答案:

没有答案