Spring数据JPA抛出java.lang.ArrayIndexOutOfBoundsException:X [Kotlin]

时间:2019-11-10 00:30:01

标签: jpa kotlin spring-data-jpa

Entity的属性之一是inline class(在提出此问题时为实验性功能)。而且在运行Spring Boot应用程序时,我得到的java.lang.ArrayIndexOutOfBoundsException: 3对我来说毫无意义。

结果是3是表示属性在我实体中位置的数字。

@Entity
@Table(name = "my_entity_table")
class MyEntity(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Long = 0,

    @Column(name = "some_field")
    val someField: Int = 2,

    @Column(name = "a_second_field")
    val aSecondField: ASecondField
)

inline class ASecondField(val value: String)

这是堆栈跟踪的一部分:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myEntityRepository': Invocation of init method failed; nested exception is java.lang.ArrayIndexOutOfBoundsException: 3


...

Caused by: java.lang.ArrayIndexOutOfBoundsException: 3
    at org.springframework.data.mapping.model.PreferredConstructorDiscoverer$Discoverers.buildPreferredConstructor(PreferredConstructorDiscoverer.java:221)
    at org.springframework.data.mapping.model.PreferredConstructorDiscoverer$Discoverers.access$200(PreferredConstructorDiscoverer.java:89)
    at org.springframework.data.mapping.model.PreferredConstructorDiscoverer$Discoverers$2.lambda$discover$0(PreferredConstructorDiscoverer.java:161)

...

1 个答案:

答案 0 :(得分:0)

解决方案是使我的内联类(在示例中为ASecondField)成为typealias

原来的代码是:

inline class ASecondField(val value: String)

这就是我解决的方法:

typealias ASecondField = String

当然,这不是最佳答案,因为我不得不更改原始设计。