我的数据库中有一个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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。