Hibernate:Kotlin数组到Java数组

Hibernate:Kotlin数组到Java数组,java,hibernate,jpa,kotlin,Java,Hibernate,Jpa,Kotlin,我将Kotlin和Hibernate用于JPA实体。我已尝试实施以下解决方案: 我遇到了TypeDef注释的问题。我实际上是在尝试用Kotlin编写以下Java代码: JAVA @TypeDefs({ @TypeDef( parameters = { @Parameter( value = "sql_array_type", name = "SEAT_PROPERTY_ENUM"

我将Kotlin和Hibernate用于JPA实体。我已尝试实施以下解决方案:

我遇到了TypeDef注释的问题。我实际上是在尝试用Kotlin编写以下Java代码:

JAVA

@TypeDefs({
    @TypeDef(
        parameters = {
            @Parameter(
                value = "sql_array_type",
                name = "SEAT_PROPERTY_ENUM"
            )
        },
        defaultForType = SeatPropertyEnum[].class,
        typeClass = EnumArrayType.class
    )
})
为了确保这一点,我首先用Java编写了代码,然后将其转换为Kotlin。我觉得很好:

KOTLIN

@TypeDefs(
    TypeDef(
        parameters = [
            Parameter(
                value = "sql_array_type",
                name = "SEAT_PROPERTY_ENUM"
            )
        ], 
        defaultForType = Array<SeatPropertyEnum>::class,
        typeClass = EnumArrayType::class
    )
)
@TypeDefs(
类型定义(
参数=[
参数(
value=“sql\u数组\u类型”,
name=“座位\属性\枚举”
)
], 
defaultForType=Array::class,
typeClass=EnumArrayType::class
)
)

然而,当我运行代码和测试时,我得到了一个错误。问题在于defaultForType属性。将我的Kotlin代码反编译回Java后,
Array::class
已转换为
SeatPropertyEnum.class
。它应该是
SeatPropertyEnum[].class
。这到底是怎么回事?

您是否尝试过用
Array::class.java
替换
Array::class
?因为kotlin::class操作符不返回java类,而是返回一个KClass对象,我不知道hibernate将如何处理它。如果我更改为该类型,则会出现以下编译错误:
预期类型不匹配:推断类型为class,但预期KClass
@amanin注释规则是特殊的,尤其是如果需要将类指定为批注的参数,请使用Kotlin类(KClass)。Kotlin编译器将自动将其转换为Java类,以便Java代码可以正常访问注释和参数。”根据它的工作原理:“例如,
Array::class
将被转换为
String[].class
。"; 我建议报告一个bug。您是否尝试过用
Array::class.java
替换
Array::class
?因为kotlin::class操作符不返回java类,而是返回一个KClass对象,我不知道hibernate将如何处理它。如果我更改为该类型,则会出现以下编译错误:
预期类型不匹配:推断类型为class,但预期KClass
@amanin注释规则是特殊的,尤其是如果需要将类指定为批注的参数,请使用Kotlin类(KClass)。Kotlin编译器将自动将其转换为Java类,以便Java代码可以正常访问注释和参数。”基于此,它应该可以工作:“例如,
Array::class
将被转换为
String[].class
”;我建议报告一个bug。