使用Hibernate在Postgresql中保留EnumSet

时间:2015-03-05 14:05:26

标签: java hibernate postgresql enums enumset

Effective Java,第32项,声明使用EnumSet而不是位字段。我还在这个主题上找到了this nice tutorial。这本书已经存在了一段时间,所以为什么我没有找到关于如何使用Hibernate持久化EnumSet的任何帖子?好吧,我实际上找到了this one和{{ 3}},但它们都很老,指向相同且更老的解决方案,遗憾的是它没有帮助我,也许是因为我缺乏更深层次的hibernate知识?这是我的代码的摘要:

public class MyThing {
    public enum MyOptions {
        FLAG1, FLAG2
    }

    @Id
    private Long id;

    @Column(name = "options")
    private EnumSet<MyOptions> options;

    // [other fields, getters, setters etc]
}

我尝试了其他注释,例如

@ElementCollection

有无(targetClass = MyOptions.class)

@JoinTable(name = "my_options",
    joinColumns = @JoinColumn(name = "id"))

以及

@OneToMany
@JoinColumn(name = "options")

但没有运气。

最好,我将信息存储在my_thing表的新列中,但如果需要,我还可以使用单独的枚举表。

1 个答案:

答案 0 :(得分:4)

试试这个

@ElementCollection
@CollectionTable(name = "my_options", 
        joinColumns = @JoinColumn( name = "mything_id"))
@Column(name = "option")
@Enumerated(EnumType.STRING)
private Set<MyOptions> options;

使用此配置,您需要一个名为my_options的数据库表,其中列optionmything_id的目标是MyThing表。