У меня есть эта сущность
@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[]».
Как определить тип данных массива?
@NikosParaskevopoulos Думаю, я нашел решение, см. мой ответ
Да, если вы используете Hibernate и не возражаете против переносимости, это хорошая идея. (Он действительно не переносимый, но я не против) Почему бы вам тоже не отметить свой ответ как принятый?
@NikosParaskevopoulos, потому что «Вы можете принять свой ответ завтра». Что вы подразумеваете под портативностью?
(переносимость: @Type
специфичен для Hibernate, поэтому он не будет работать, скажем, в EclipseLink; просто небольшой комментарий)
Я думаю, это путь
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>,
JPA не поддерживает массивы на стороне Java «из коробки», хотя БД может их поддерживать. Решение, вероятно, простое: обеспечьте реализацию AttributeConverter, который преобразует
java.sql.Array
объекты БД в желаемыеUUID[]
.