【问题标题】:Exception while converting dates转换日期时出现异常
【发布时间】:2018-11-29 10:52:53
【问题描述】:

我有以下表结构,其中一些列是时间戳:

CREATE TABLE `product_space` (
  `ps_date_created` timestamp NULL DEFAULT NULL,
  `ps_date_modified` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  //some other fields
) 

我还有一个域类,它代表表中的一行,并将所有这些日期字段包括为ZonedDateTime

@Data
@Builder
public class ProductSpace {

    @Column(name = CREATED_AT)
    private ZonedDateTime createdAt;

    @Column(name = UPDATED_AT)
    private ZonedDateTime updatedAt;

    @Column(name = PS_DATE_CREATED)
    private ZonedDateTime psDateCreated;

    @Column(name = PS_DATE_MODIFIED)
    private ZonedDateTime psDateModified;

    //some other fields
}

然后我尝试运行以下查询:

Optional.ofNullable(
    DSL.using(configuration)
        .selectFrom(PRODUCT_SPACE_TABLE_NAME)
        .where(field(GTIN, Long.class).eq(gtin))
        .fetchAny())
    .map(x -> x.into(ProductSpace.class));

这会产生异常:

org.jooq.exception.DataTypeException: Cannot convert from 1 (class org.jooq.types.ULong) to class java.time.ZonedDateTime

我需要保持域原样并且不更改字段类型,因此需要保持 ZonedDateTime。但是,不知道如何解决此问题。

非常感谢您对此提供任何帮助。

【问题讨论】:

  • 使用的是哪个版本?
  • @JacekCz 3.10.4
  • 什么 JPA 提供者和什么版本?

标签: java jpa jooq


【解决方案1】:

jOOQ 不支持 ZonedDateTime 类型,因为 JDBC 中没有关于如何将其映射到底层 SQL 数据类型的规范。您必须自己手动映射类型:

Optional.ofNullable(DSL.using(configuration)
    .selectFrom(PRODUCT_SPACE_TABLE_NAME)
    .where(field(GTIN, Long.class).eq(gtin))
    .fetchAny()
).map(x -> {
    ProductSpace result = new ProductSpace();
    result.setCreatedAt(myConversionFunction(x.get(PRODUCT_SPACE_TABLE_NAME.CREATED_AT)))
    ...
    return result;
});

或者,您可以将上面的RecordMapper lambda 提取成可重用的RecordMapper,或者您可以定义自己的RecordMapperProvider,它会覆盖默认值并全局实现这种类型的映射: https://www.jooq.org/doc/latest/manual/sql-execution/fetching/pojos-with-recordmapper-provider

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多