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-types
和 StringArrayType
)获取的工作,但没有映射到枚举。你知道这是否可能吗?
因为我们知道如何将 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")]
)
基本上标题里都有。
我的数据库中有一列是 varchar[]
。
我真的很想把它映射到Java/Kotlinenum
。我们已经完成了将其作为 String
列表(通过 com.vladmihalcea:hibernate-types
和 StringArrayType
)获取的工作,但没有映射到枚举。你知道这是否可能吗?
因为我们知道如何将 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")]
)