Hibernate 6:带有本地日期变量的 Json 类型

Tho*_*mas 6 java spring hibernate jpa kotlin

我最近切换到 spring 3.0,hibernate 现在支持 json 类型定义,如下所示:

        @JdbcTypeCode(SqlTypes.JSON)
        var request: ReportRequestDto,
Run Code Online (Sandbox Code Playgroud)

但问题是ReportRequestDtohas val from: LocalDate,这会在保存实体时导致异常:

Java 8 date/time type `java.time.LocalDate` not supported by default
Run Code Online (Sandbox Code Playgroud)

我的 pom 中有jackson-datatype-jsr310依赖项,我也有对象映射器的配置:

    @Bean
    @Primary
    fun objectMapper(): ObjectMapper {
        val objectMapper = ObjectMapper()
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
        objectMapper.registerModule(JavaTimeModule())
        objectMapper.registerKotlinModule()
        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
        return objectMapper
    }
Run Code Online (Sandbox Code Playgroud)

看起来 hibernate 没有“自动装配”对象映射器,因此它没有注册 java 时间模块。

Avi*_*eva 2

您必须按照此处HibernatePropertiesCustomizer所述创建 bean

下面是 Kotlin 代码片段示例:

@Bean
    fun jsonFormatMapperCustomizer(objectMapper: ObjectMapper): HibernatePropertiesCustomizer {
        return HibernatePropertiesCustomizer { properties: MutableMap<String, Any> ->
            properties[AvailableSettings.JSON_FORMAT_MAPPER] = JacksonJsonFormatMapper(objectMapper)
        }
    }
Run Code Online (Sandbox Code Playgroud)