繁体   English   中英

不可连接的枚举的休眠映射列表

[英]Hibernate map list of enums without jointable

我想以特定的方式映射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, ",");
}

或者,您可以尝试使用@ConverterList<MyEnum>直接映射到varchar列

@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) {
        ...
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM