如果您想以 PostgreSQL 特定方式 映射枚举列表,您可以执行以下操作:
将hibernate-types lib 添加到您的项目中:
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>2.1.1</version>
</dependency>
将枚举类型 languages 添加到您的 PostgreSQL 数据库中:
create type languages as enum (
'EN', 'FR', 'ZH'
);
用这种类型映射你的枚举集合:
@Entity
@Table(name = "person")
@TypeDef(name = "pgsql_enum", typeClass = PostgreSQLEnumType.class)
public class Person {
//...
@Enumerated(STRING)
@ElementCollection
@CollectionTable(name = "person_languages",
joinColumns = @JoinColumn(name = "person_id"),
foreignKey = @ForeignKey(name = "fk_person_languages_person"))
@Column(name = "language", columnDefinition = "languages", nullable = false)
@Type(type = "pgsql_enum")
private List languages;
}
有关 hibernate-types lib 的更多信息,请参阅其作者 Vlad Mihalcea,site。
如果您不需要 PostgreSQL 特定的方式,您可以像这样映射您的枚举列表:
@Entity
@Table(name = "person")
public class Person {
//...
@Enumerated(STRING)
@ElementCollection
@CollectionTable(name = "person_languages",
joinColumns = @JoinColumn(name = "person_id"),
foreignKey = @ForeignKey(name = "fk_person_languages_person"))
@Column(name = "language", length = 2, nullable = false)
private List<Language> languages;
}