用于 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

GO语言学习:代码拆分(包级私有和公共)

数据包级网络遥测和网络安全推送分析

《Go语言精进之路》读书笔记 | 在init函数中检查包级变量的初始状态