Java Hibernate不带jointable的枚举映射列表

Java Hibernate不带jointable的枚举映射列表,java,hibernate,enums,Java,Hibernate,Enums,我想以一种特定的方式映射Hibernate中的枚举列表 它应该保存为单个列中以逗号分隔的字符串数组,而不使用连接表 与以下注释一样,将单个枚举值保存为数据库中的字符串: @Enumerated(EnumType.STRING) 我想使用类似于ElementCollection的注释来保存枚举列表,或在保存枚举值列表的实体的数据库中的单个列中进行设置 这可能吗?不,使用@ElementCollection您必须使用@CollectionTable,这是一个单独的数据库表,仅用于存储您的值(在这种

我想以一种特定的方式映射Hibernate中的枚举列表

它应该保存为单个列中以逗号分隔的字符串数组,而不使用连接表

与以下注释一样,将单个枚举值保存为数据库中的字符串:

@Enumerated(EnumType.STRING)
我想使用类似于
ElementCollection
的注释来保存枚举列表,或在保存枚举值列表的实体的数据库中的单个列中进行设置


这可能吗?

不,使用
@ElementCollection
您必须使用
@CollectionTable
,这是一个单独的数据库表,仅用于存储您的值(在这种情况下更可取)

您可以使用一个简单的
String
映射和两个util方法将CSV字符串转换为枚举列表,反之亦然。像这样的

private String myCSVValues;
...
public List<MyEnum> getMyEnums() {
    String[] csvs = this.myCSVValues.split(",");
    List<MyEnum> myEnums = new ArrayList<MyEnum>();
    for (String s : csvs) {
        myEnums.add(MyEnum.valueOf(s));
    }
    return myEnums;
}

public void setMyEnums(List<MyEnum> myEnums) {
    this.myCSVValues = org.apache.commons.lang3.StringUtils.join(myEnums, ",");
}

谢谢你的回答。Hibernate Nverse似乎与AttributeConverters()不兼容,因此它会抱怨无法确定枚举列表的类型。是的,看起来您对Envers的看法是正确的。然而,在bug注释中提到了一个解决方法,即使用,应该很容易测试。如果我的第一个建议对你有效的话,你总是可以回过头来。hibernate类型是我的attributeconverter的替代品吗?我应该使用UserType还是CustomCollectionType?(因为它是一个列表)转换器看起来更简单,我应该把转换逻辑放在自定义类型的nullSafeGet()中吗?我自己从来没有使用过自定义类型,所以我不能肯定地告诉你什么可以工作。我首先尝试使用
UserType
,因为它看起来可以很快完成。这是一个集合,但由枚举而不是实体组成,这就是为什么我认为
UserType
可以工作的原因。
@Converter(autoApply = true)
public class MyEnumConverter implements AttributeConverter<List<MyEnum>, String> {

    @Override
    public String convertToDatabaseColumn(List<MyEnum> myEnums) {
        ...
    }

    @Override
    public List<MyEnum> convertToEntityAttribute(String dbData) {
        ...
    }

}