次のスニペットのように、一連のタグを含むエンティティ 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の列にはデフォルト値がないと言います(これは非常に奇妙だと思います)。