Как сопоставить тип базы данных массива с Kotlin

У меня есть эта сущность

@Entity
@Table(name = "foo")
class Foo(
    @Column(name = "bar_ids", columnDefinition = "uuid[]")
    val barIds: Array<UUID>,
) {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    val id: Long = 0
}

что дает мне

Тип атрибута «Базовый» не должен быть «UUID[]».

Как определить тип данных массива?

JPA не поддерживает массивы на стороне Java «из коробки», хотя БД может их поддерживать. Решение, вероятно, простое: обеспечьте реализацию AttributeConverter, который преобразует java.sql.Array объекты БД в желаемые UUID[].

Nikos Paraskevopoulos 25.06.2024 09:21

@NikosParaskevopoulos Думаю, я нашел решение, см. мой ответ

four-eyes 25.06.2024 10:00

Да, если вы используете Hibernate и не возражаете против переносимости, это хорошая идея. (Он действительно не переносимый, но я не против) Почему бы вам тоже не отметить свой ответ как принятый?

Nikos Paraskevopoulos 25.06.2024 13:43

@NikosParaskevopoulos, потому что «Вы можете принять свой ответ завтра». Что вы подразумеваете под портативностью?

four-eyes 26.06.2024 07:16

(переносимость: @Type специфичен для Hibernate, поэтому он не будет работать, скажем, в EclipseLink; просто небольшой комментарий)

Nikos Paraskevopoulos 26.06.2024 11:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, это путь


import io.hypersistence.utils.hibernate.type.array.EnumArrayType
import io.hypersistence.utils.hibernate.type.array.internal.AbstractArrayType

@Type(
      value = EnumArrayType::class,
      parameters = [Parameter(name = AbstractArrayType.SQL_ARRAY_TYPE, value = "uuid")]
    )
    @Column(name = "bar_ids", columnDefinition = "uuid[]")
    val barIds: List<UUID>,

Другие вопросы по теме