VARCHAR我的数据库中有一个字段,该字段的值为val1,val2,val3。
VARCHAR
val1,val2,val3
是否可以ArrayList<String>使用逗号作为分隔定界符将其设置为实体的属性?
ArrayList<String>
如果您使用JPA 2.1,则可以创建一个AttributeConverter:
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转换器中,因为结果存储在属性中,对该列表所做的任何更改都将写回到数据库中- 因此,我需要一个可更改的列表(我无法在的结果中添加任何内容Arrays.asList)。在 2.1之前的 解决方案中,结果未与属性关联,并且可变列表不会与属性同步。
Arrays.asList
ArrayList
要查询包含此类属性中特定项目的实体,请在此处查看我的答案