【发布时间】:2017-03-03 21:04:05
【问题描述】:
我有两个具有多对多关系的实体。我的数据库结构:
Document Status Document_Status
╔════╗ ╔════╦══════════╗ ╔═════════════╦═══════════╗
║ id ║ ║ id ║ status ║ ║ document_id ║ status_id ║
╠════╣ ╠════╬══════════╣ ╠═════════════╬═══════════╣
║ 1 ║ ║ 1 ║ STORED ║ ║ 1 ║ 1 ║
║ 2 ║ ║ 2 ║ APPROVED ║ ║ 2 ║ 1 ║
║ 3 ║ ╚════╩══════════╝ ║ 3 ║ 2 ║
╚════╝ ╚═════════════╩═══════════╝
我想使用枚举作为状态。
public enum Status {
STORED, APPROVED
}
@Entity
public class Document {
@Id
@GeneratedValue
private long id;
// ??
private Set<Status> statuses;
}
我尝试过以这种方式实现它,但解决方案会忽略状态表并尝试以 EnumType.ORDINAL 方式从 status_id 创建状态:
@ElementCollection(targetClass = Status.class)
@CollectionTable(name = "Document_Status", joinColumns = @JoinColumn(name = "document_id"))
@Column(name = "status_id", nullable = false)
private Set<Status> statuses;
@Enumerated(EnumType.STRING) 也无济于事。它开始在 Status 枚举中查找名称为“1”的值。
我可以像推荐的here 那样将枚举包装成实体。但是不创建包装实体就不能实现吗?
【问题讨论】:
-
你的数据库结构修好了?
-
不,不是。我只想将枚举值存储为字符串,以避免在枚举更改时出现问题。并且不想直接将字符串存储在 Document_Status 中以避免重复。如果您知道如何重构结构并满足要求,我将不胜感激。
标签: java hibernate jpa enums many-to-many