2

Effective Java,第 32 项,状态使用 EnumSet 而不是位字段。我还找到了关于该主题的不错的教程。这本书已经出版了一段时间,为什么我没有找到任何关于如何使用 Hibernate 持久化 EnumSet 的帖子?好吧,我实际上找到了这个另一个,但是它们都很旧,指向相同且更旧的解决方案,不幸的是,这对我没有帮助,也许是因为我缺乏更深入的休眠知识?这是我的代码的摘要:

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表的新列中,但如果需要,我也可以为枚举使用单独的表。

4

1 回答 1

4

尝试这个

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

使用此配置,您需要一个my_options以列命名option且以表为mything_id目标的数据库MyThing表。

于 2015-03-05T14:29:33.840 回答