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

Hai*_*ang 5 java hibernate jpa kotlin spring-boot

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

 categories    | text[]         |           |          |
Run Code Online (Sandbox Code Playgroud)

如何在实体类中声明该字段?

我在下面的文件中尝试过Product.kt,但它抛出错误[ERROR]:ERROR: relation "product_categories" does not exist

@ElementCollection
@Column(name = "categories")
var categories: List<String>? = emptyList()
Run Code Online (Sandbox Code Playgroud)

我的目的是将字符串数组保存为实体的一个字段,我不想做任何与“一对多”相关的事情。

如果您知道任何 Java 版本的解决方案并且它有效,我也会接受答案。谢谢

Ada*_*old 2

这不起作用,@ElementCollection因为它总是尝试使用另一个表。您需要的是自定义类型。为此,您需要以下依赖项:

<dependency>
    <groupId>com.vladmihalcea</groupId>
    <artifactId>hibernate-types-52</artifactId>
    <version>${hibernate-types.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

然后你可以定义自己的类型:


import com.vladmihalcea.hibernate.type.array.StringArrayType

@TypeDefs({
    @TypeDef(
        name = "string-array", 
        typeClass = StringArrayType.class
    )
})
@Entity
class YourEntity {

    @Type( type = "string-array" )
    @Column(
        name = "categories", 
        columnDefinition = "character varying[]"
    )
    var categories: Array<String>;
}
Run Code Online (Sandbox Code Playgroud)

我还没有尝试过使用 a List,因为它映射到Array. 更多信息在答案中。