Issue
I have a field in Postgres in array type:
categories | text[] | | |
How can I declare the field in the entity class?
I have tried below in Product.kt
file but it throws error [ERROR]:ERROR: relation "product_categories" does not exist
@ElementCollection
@Column(name = "categories")
var categories: List<String>? = emptyList()
My purpose is to save the string array as one field of the entity, I am not trying to do anything related "One to Many".
If you know any Java version solution and it works, I will accept the answer as well. Thanks
Solution
This won't work with @ElementCollection
as it will always try to use another table. What you need is a custom type instead. For this you'll need this dependency:
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>${hibernate-types.version}</version>
</dependency>
then you can define your own types:
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>;
}
I haven't tried this with a List
though, as this maps to an Array
. More info in this answer.
Answered By - Adam Arold
Answer Checked By - Katrina (JavaFixing Volunteer)