Hibernate映射MySQL SET类型

时间:2017-09-05 15:14:54

标签: java mysql hibernate jpa

表格中有SET(https://dev.mysql.com/doc/refman/5.7/en/set.html)类型字段:SET('A','B')。 并且枚举:

public enum Foo {
 A, B
}

所以我想将该字段映射到Set<Foo>

@Entity
public class Bar {
...
@Column(name="foos")
private Set<Foo> foos;
...
}

或者我想知道至少使用Hibernate读取MySQL SET的任何方法。

1 个答案:

答案 0 :(得分:2)

有趣的问题!不幸的是,hibernate无法处理特定于数据库的数据类型。 (至少我不是没有意识到它,所以随时纠正我:)

您可以将此视为String这么简单,并在getter中解析它:

@Entity
class Bar {
    ...
    @Column(name = "foos")
    private String foos;

    public Set<Foo> getFoos() {
        return (null == foos) ?
                Collections.emptySet() :
                Arrays.stream(foos.split(",")).map(Foo::valueOf).collect(Collectors.toSet());
    }
    ...
}

我承认,这不是 ORM / Hibernate-way 的做法,但是它可以很好地完成工作。