JPA данных Spring выбрасывает java.lang.ArrayIndexOutOfBoundsException: X [Kotlin] - PullRequest
0 голосов
/ 10 ноября 2019

Одним из атрибутов Entity был inline class (экспериментальная особенность во время этого вопроса). И когда я запускал приложение весенней загрузки, я получал 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 голосов
/ 10 ноября 2019

Решением для этого было сделать мой встроенный класс (ASecondField в примере) typealias.

Итак, оригинальный код был:

inline class ASecondField(val value: String)

И это былокак я это решил:

typealias ASecondField = String

Конечно, это не оптимальный ответ, так как мне пришлось изменить оригинальный дизайн.

...