Hibernate:Kotlin数组到Java数组
我将Kotlin和Hibernate用于JPA实体。我已尝试实施以下解决方案: 我遇到了TypeDef注释的问题。我实际上是在尝试用Kotlin编写以下Java代码: JAVAHibernate: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"
@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。