我有一个包含一组标签的实体 A,如以下代码段所示:
@Entity
@Table(name = "tab_a")
public class A {
......
@Column(name = "name")
@ElementCollection(targetClass = Genre.class, fetch = FetchType.EAGER)
@CollectionTable(name = "tab_resource_tags", joinColumns = @JoinColumn(name = "id"))
@Enumerated(value = EnumType.STRING)
@OrderColumn
private Set<Genre> resourceTags;
------
}
我创建了一个额外的 tab_resource_tags 只是为了让这个东西正常工作,但是当我运行我的单元测试并将标签插入到类 A 中时,新创建的表仍然是空的。我真的不明白它的意义。
我的目标是将标签存储在存储“A”实体的同一个表中。理想情况下,它们应该是纯文本并用逗号分隔以便人类可读。
我的问题是:创建一个单独的表仅用于插入一组/列表枚举是否值得?完全不将枚举反映到数据库中并将其插入原始的“A”表中不是更优雅吗?
任何与此相关的意见将不胜感激。
后期编辑:
作为一种解决方法,我尝试指定
@CollectionTable(name = "tab_a", joinColumns = @JoinColumn(name = "id"))
但是 Hibernate 说来自 tab_a 的列没有默认值(我会说这很奇怪)。