【问题标题】:jooq fetch custom object has ZonedDateTime field met DataTypeExceptionjooq fetch custom object has ZonedDateTime field met DataTypeException
【发布时间】:2018-05-26 20:47:33
【问题描述】:

java-1.8 jooq-3.10.0 SpringBoot-1.5.7

myCondition = create .select(... TABLE_AL.START_DATE.as("table_al_start_date"), TABLE_BR.START_DATE.as("table_br_start_date"))) .from(MAIN).innerJoin(TABLE_AL).onkey() .innerJoin(TABLE_BR).onkey() .where(DSL.trueCondition()); List<MyObject> myObjList = myCondition.fetch().into(MyObject.class)

class MyObject(){ ZonedDateTime tableAlStartDate; ZonedDateTime tableBrStartDate; ... }

我的对象有来自多个表的字段, table_al_start_datejava.time.ZonedDateTimetimestamp without time zone,nullablePostgreSQL

获取到MyObject 时会抛出 DataType 异常 Caused by: org.jooq.exception.DataTypeException: Cannot convert from 1511971200000 (class java.lang.Long) to class java.time.ZonedDateTime at org.jooq.tools.Convert$ConvertAll.fail(Convert.java:1169) at org.jooq.tools.Convert$ConvertAll.toDate(Convert.java:1121) at org.jooq.tools.Convert$ConvertAll.from(Convert.java:823)

如果使用 .select(TABLE_A.START_DATE.as("table_a_start_date").cast(ZonedDateTime.class) 会遇见 org.jooq.exception.SQLDialectNotSupportedException: Type class java.time.ZonedDateTime is not supported in dialect null

还尝试添加 setter setTableAlStartDate(Long long),但不起作用。

我在custom-bindings 找到了转换器,创建自定义转换器后应该做什么,应该在哪里 DataType&lt;LocalDate&gt; type = SQLDataType.DATE.asConvertedDataType(new LocalDateConverter());这是?

应该如何处理这个ZonedDateTime 字段? 谢谢。

【问题讨论】:

    标签: timestamp jooq


    【解决方案1】:

    不确定这是否对我有用:

    myCondition = create
        .select(,,,
            DSL.field("table_al.start_date", SQLDataType.TIMESTAMP
                .asConvertedDataType(ts2zonedConverter))
                .as("table_al_start_date"),,,, 
        .from(,,,);
    

    我的转换器

    public class TsZonedDateTimeConverter implements Converter<Timestamp, ZonedDateTime> {
    @Override public ZonedDateTime from(Timestamp t) {
            return t == null ? null : t.toInstant().atZone(ZoneId.of("UTC"));
        }
    @Override public Timestamp to(ZonedDateTime u) {
            return u == null ? null : Timestamp.from(u.toInstant());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-11-22
      • 2016-09-30
      • 2021-07-05
      • 2021-02-10
      • 2014-04-07
      • 2019-07-03
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      相关资源
      最近更新 更多