用于 Hibernate 的 Kotlin 包级 TypeDefs
Posted
技术标签:
【中文标题】用于 Hibernate 的 Kotlin 包级 TypeDefs【英文标题】:Kotlin package level TypeDefs for Hibernate 【发布时间】:2019-11-17 19:13:34 【问题描述】:我有一个用于休眠的自定义类型 (TipoSiNo
),这相当于 YesNoType
,但用于西班牙语 (S/N)。
在使用 java 时,我将这种类型声明为 package-info.java 文件中布尔字段的默认值:
@TypeDefs(@TypeDef(name = "si_no", typeClass = TipoSiNo.class, defaultForType = Boolean.class))
package com.xyz;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
import com...TipoSiNo;
这适用于 java 实体类,但是当我将它们转换为 kotlin 时出现错误:
Data conversion error converting "'S'...
所以我想我必须将 package-info 文件转换为 kotlin:
@file:TypeDefs(TypeDef(name = "si_no", typeClass = TipoSiNo::class, defaultForType = Boolean::class))
package com.xyz
import org.hibernate.annotations.TypeDef
import org.hibernate.annotations.TypeDefs
import com...TipoSiNo
但即便如此,它似乎也不起作用。
【问题讨论】:
【参考方案1】:目前没有与 Kotlin 等效的 package-info.java
。作为一种解决方法,您可以简单地在 Kotlin 中包含 package-info.java
,它将被处理。
如果你使用的是 Spring Boot,你可能会遇到这个额外的问题:How to configure package level @TypeDefs with Spring Hibernate:
Spring 在 package-info.java 类中扫描 TypeDef 似乎有些问题。
【讨论】:
以上是关于用于 Hibernate 的 Kotlin 包级 TypeDefs的主要内容,如果未能解决你的问题,请参考以下文章
springboot+kotlin+gradle+hibernate学习笔记
使用 Spring Boot 和 Kotlin 进行 Hibernate 急切加载整个对象图
Spring JPA/Hibernate Repository findAll 在 Kotlin 中默认执行 N+1 个请求而不是 JOIN