varchar 的 Postgres 数组与枚举的 Java/Kotlin collection 之间的 Hibernate 映射

Hibernate mapping between Postgres array of varchar and a Java/Kotlin collection of enum

基本上标题里都有。

我的数据库中有一列是 varchar[]

我真的很想把它映射到Java/Kotlinenum。我们已经完成了将其作为 String 列表(通过 com.vladmihalcea:hibernate-typesStringArrayType)获取的工作,但没有映射到枚举。你知道这是否可能吗?

因为我们知道如何将 varchar 映射到 enum,以及如何将 varchar[] 映射到 String 的 collection,我很想认为这应该是可能的,但我还没有成功。

这是我当前配置的一个简单示例:

CREATE TABLE test(my_values varchar[]) ;
INSERT INTO test(my_values) values ('{VAL1, VAL2}')
@Entity
@Table(name = "test")
data class DbTest(
        @Column(name = "my_values")
        val myValues: List<Values>
)

enum class Values {
       VAL1, VAL2
}

我试过这个:https://vladmihalcea.com/map-postgresql-enum-array-jpa-entity-property-hibernate/ 看起来不错,但你必须在数据库中定义枚举,我们不希望这样。

谢谢!

我正在发布我的解决方案,我没有成功获得 List<Values>,尽管我获得了 Array<Values>,这对我来说很好。

@Entity
@Table(name = "test")
@TypeDef(
        name = "values-array",
        typeClass = EnumArrayType::class,
        defaultForType = Array<Values>::class,
        parameters = [
          Parameter(
                  name = EnumArrayType.SQL_ARRAY_TYPE,
                  value = "varchar"
          )
        ]
)
data class DbTest(
        @Type(type = "values-array")
        @Column(name = "my_values", columnDefinition = "varchar[]")
        val myValues: Array<Values>
)

enum class Values {
       VAL1, VAL2
}

这非常有用,我可以很容易地将我的数组映射到列表,反之亦然,这没问题。

希望有一天这会对某人有所帮助 ;)

之前的答案对我不起作用,但这个答案有效:

    TypeDef(
      name = "enums-array",
      typeClass = ListArrayType::class,
      parameters = [Parameter(name = EnumArrayType.SQL_ARRAY_TYPE, value = "varchar")]
    )