java enum setget_java – 如何持久化EnumSet(使用两个数据库表...

我想在我的实体中将一组选项表示为EnumSet,并在我的数据库中表示为一对多关系.这怎么做得好?我只能找到不使用两个表的旧(预注释)答案或答案.

我定义了以下表格:

CREATE TABLE Users (

id SERIAL PRIMARY KEY,

name VARCHAR(255) NOT NULL UNIQUE

);

CREATE TABLE User_Options (

user_id INT,

user_option VARCHAR(255),

PRIMARY KEY (user_id, user_option),

FOREIGN KEY (user_id) REFERENCES Users(id)

ON DELETE CASCADE

ON UPDATE CASCADE

);

这个实体类:

@Entity(name = "Users")

public final class User {

@Id

@GeneratedValue

private int id;

@Column(nullable = false, unique = true)

private String name;

private final Set options;

{

this.options = EnumSet.noneOf(UserOption.class);

}

/* plain getter for id included */

/* plain getter and setter for name included */

@ElementCollection(fetch = FetchType.EAGER)

@Enumerated(EnumType.STRING)

@CollectionTable(name = "User_Options"

, joinColumns = @JoinColumn(name = "user_id"))

@Column(name = "user_option", nullable = false)

public Set getOptions() {

return this.options;

}

}

当然还有一个枚举:

public enum UserOption {

OPTION_A,

OPTION_B,

OPTION_C;

}

当我启动Tomcat时,我得到以下异常:

org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: Users, for columns: [org.hibernate.mapping.Column(options)]

此异常是导致彼此的一堆异常的根源.它会导致javax.persistence.PersistenceException(无法构建EntityManagerFactory),从而导致一些依赖注入异常.

我承认我在JPA / Hibernate中不够精通,无法理解我做错了什么.有人可以帮帮我吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值