如何用JPA和hibernate映射Java/Kotlin字符串数组和Postgres SQL数组

如何用JPA和hibernate映射Java/Kotlin字符串数组和Postgres SQL数组,java,spring-boot,hibernate,kotlin,jpa,Java,Spring Boot,Hibernate,Kotlin,Jpa,我在Postgres中有一个数组类型的字段: categories | text[] | | | 如何在实体类中声明字段 我在下面的Product.kt文件中尝试过,但它抛出错误[error]:错误:关系“Product\u categories”不存在 @ElementCollection @Column(name = "categories") var categories: List<String&g

我在Postgres中有一个数组类型的字段:

 categories    | text[]         |           |          |
如何在实体类中声明字段

我在下面的
Product.kt
文件中尝试过,但它抛出错误
[error]:错误:关系“Product\u categories”不存在

@ElementCollection
@Column(name = "categories")
var categories: List<String>? = emptyList()
@ElementCollection
@列(name=“categories”)
变量类别:列表?=空列表()
我的目的是将字符串数组保存为实体的一个字段,而不是尝试执行任何与“一对多”相关的操作


如果您知道任何Java版本的解决方案并且它可以工作,我也会接受这个答案。谢谢

这不适用于
@ElementCollection
,因为它将始终尝试使用另一个表。您需要的是一个自定义类型。为此,您需要此依赖项:


Vladmichalcea网站

答案。

亚当的答案适用于用Java编写的项目。由于我的项目是用Kotlin编写的,我在下面分享了我的版本,希望它能有所帮助,人们可以立即使用它,而不是花时间转换:

有用资源:

博士后:

alter table product add column categories text[];
格拉德尔:

implementation("com.vladmihalcea:hibernate-types-52:2.10.0")
Product.kt

import com.vladmihalcea.hibernate.type.array.StringArrayType
import org.hibernate.annotations.*
import javax.persistence.*
import javax.persistence.Entity


@TypeDefs(
    TypeDef(name = "string-array", typeClass = StringArrayType::class)
)
@Entity
class Product(
        var name: String,

        @Type(type = "string-array")
        @Column(name = "categories", columnDefinition = "text[]")
        var categories: Array<String>? = arrayOf(),
)
import com.vladmilcea.hibernate.type.array.StringArrayType
导入org.hibernate.annotations*
导入javax.persistence*
导入javax.persistence.Entity
@TypeDefs(
TypeDef(name=“string array”,typeClass=StringArrayType::class)
)
@实体
类产品(
变量名称:String,
@类型(Type=“字符串数组”)
@列(name=“categories”,columnDefinition=“text[]”)
变量类别:数组?=arrayOf(),
)
Java和Kotlin之间有两个区别:

  • Kotlin中的数组类型不是String[],而是array,我也尝试了List,但没有成功
  • TypeDefs,TypeDef不同,没有@符号

  • 谢谢你,亚当。这是正确的方向,我已经转换到Kotlin版本,一切都很好!对于任何需要Kotlin版本的人,我已经发布了所有详细信息作为答案。