将实体中的列表转换为数据库中的单个字符串列
发布时间:2020-05-24 11:06:33 所属栏目:MsSql 来源:互联网
导读:我的数据库中有一个VARCHAR字段,该字段的值为val1,val2,val3. 是否可以将其设置为ArrayList String使用逗号作为拆分分隔符的实体的属性? 如果您使用JPA 2.1,那么您可以创建一个AttributeConverter: @Converterpublic class StringListConverter implements
|
我的数据库中有一个VARCHAR字段,该字段的值为val1,val2,val3. 是否可以将其设置为ArrayList< String>使用逗号作为拆分分隔符的实体的属性? 解决方法如果您使用JPA 2.1,那么您可以创建一个AttributeConverter:@Converter
public class StringListConverter implements AttributeConverter<List<String>,String> {
@Override
public String convertToDatabaseColumn(List<String> list) {
// Java 8
return String.join(",",list);
// Guava
return Joiner.on(',').join(list);
}
@Override
public List<String> convertToEntityAttribute(String joined) {
return new ArrayList<>(Arrays.asList(joined.split(",")));
}
}
您可以在实体中使用此转换器: @Column @Convert(converter = StringListConverter.class) private List<String> strings; 在JPA 2.1之前,您可以手动执行此操作: @Entity
private MyEntity {
...
private String strings;
public List<String> getStrings() {
return Arrays.asList(strings.split(","));
}
public void setStrings(List<String> list) {
strings = String.join(",list);
}
}
我将Arrays.asList包装在转换器的ArrayList中,因为结果存储在属性中,对该列表的任何更改都将写回数据库 – 因此我需要一个可更改的列表(我无法在结果中添加任何内容) of Arrays.asList).在2.1之前的解决方案中,结果与属性无关,并且可更改列表不会与属性同步. 要查询包含此类属性中特定项的实体,请参阅我的答案here (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
