我在Postgres中有一个数组类型的字段:
categories | text[] | | |
如何在实体类中声明字段?
我在Product.kt
文件中尝试了以下操作,但它抛出了错误[ERROR]:ERROR: relation "product_categories" does not exist
@ElementCollection
@Column(name = "categories")
var categories: List<String>? = emptyList()
我的目的是将字符串数组保存为实体的一个字段,我并不是要做任何与“一对多”相关的事情。
如果你知道任何Java版本的解决方案,并且它能工作,我也会接受这个答案。谢谢
3条答案
按热度按时间nwo49xxi1#
Adam的答案适用于用Java编写的项目。由于我的项目是用Kotlin编写的,我在下面分享我的版本,希望它能帮助人们马上使用它,而不是花时间去转换:
有用资源:How to map Java and SQL arrays with JPA and Hibernate
波斯特格雷斯:
格瑞德:
Product.kt
Java和Kotlin之间有两个区别:
1.Kotlin中的数组类型是Array而不是String[],我也尝试了List,但没有成功。
plicqrtu2#
这在
@ElementCollection
中不起作用,因为它总是尝试使用另一个表。您需要的是一个自定义类型。为此,您需要以下依赖项:那么您可以定义自己的类型:
我还没有在
List
上尝试过,因为这Map到了Array
。更多信息请参见this答案。1aaf6o9v3#
除了Haifeng提到的一个,对于Kotlin,还有另一个选项使用
ListArrayType
而不是StringArrayType
,这样就不需要关心列表到数组的转换。我遇到了另一个检索数据的问题,我有
java.lang.ArrayStoreException: arraycopy: type mismatch: can not copy [Ljava.lang.String;[] into java.lang.String[]\n
。只是对于那些可能也会遇到这个问题的人,我的问题是存储在DB中的数据不是数组,而是数组的数组。