Read/write an array of Java enums into a database table field without any join tables.
Currently supported databases:
- Postgresql
<dependency>
<groupId>com.karakays.hibernate</groupId>
<artifactId>hibernate-enum-array</artifactId>
<version>0.1</version>
</dependency>
@Entity
public class User {
@Column(name = "badges", columnDefinition="text[]")
@Type(type = "com.karakays.hibernate.array.EnumArrayType",
parameters = { @Parameter(name="enumClass", value="com.karakays.hibernate.array.domain.User$Badge") })
private List<Badge> badges;
}
where Badge is a custom Enum
public enum Badge {
GURU, MASTER, CHALLENGER, ORACLE;
}
and its type is passed along using org.hibernate.annotations.Parameter annotation.
Now you can persist a list of enums in a table field with no further relation tables.
Please see the test class to see a full example.
Considering this class:
@Table(name = "users")
@Entity
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;
@Column(name = "badges", columnDefinition="text[]")
@Type(type = "com.karakays.hibernate.array.EnumArrayType",
parameters = { @Parameter(name="enumClass", value="com.karakays.hibernate.array.domain.User$Badge") })
private List<Badge> badges;
}
Following DDL is generated:
create table users (
id int8 not null,
name varchar(255),
badges text[],
primary key (id)
)