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

标签 java spring-boot hibernate kotlin jpa

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

 categories    | text[]         |           |          |
如何在实体类中声明字段?
我在 Product.kt 下面试过文件,但它抛出错误 [ERROR]:ERROR: relation "product_categories" does not exist
@ElementCollection
@Column(name = "categories")
var categories: List<String>? = emptyList()
我的目的是将字符串数组保存为实体的一个字段,我不想做任何与“一对多”相关的事情。
如果您知道任何 Java 版本的解决方案并且它有效,我也会接受答案。谢谢

最佳答案

Adam 的回答适用于用 Java 编写的项目。由于我的项目是用 Kotlin 编写的,我在下面分享我的版本,希望它有所帮助,人们可以立即使用它,而不是花时间进行转换:
有用资源:How to map Java and SQL arrays with JPA and Hibernate
Postgres:

alter table product add column categories text[];
Gradle :
implementation("com.vladmihalcea:hibernate-types-52:2.10.0")
产品.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(),
)
Java 和 Kotlin 之间有两个区别:
  • Kotlin 中的数组类型是 Array 而不是 String[],我也尝试过 List 但它没有用。
  • TypeDefs,TypeDef 不同,没有@符号。
  • 关于java - 如何使用 JPA 和 hibernate 映射 Java/Kotlin 字符串数组和 Postgres SQL 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64475717/

    相关文章:

    java - 共享首选项不起作用,默认值

    java - 在cmd中运行maven项目

    java - 针对特定客户端的数据恢复

    java - Postgres 中的 Bad Integer 2147483649(其 BIGINT 值)错误

    java - 链表操作的时间复杂度

    java - servlet 以编程方式设置身份验证

    java - 没有滚动条的 JScrollPane

    java - 在 Spring boot 中动态配置 DataSourceBuilder url

    reactjs - 如何修复React和Spring Web应用程序中的cors错误?

    javascript - 如何将元素列表传递到 post 方法?