当前位置: 首页 > 面试题库 >

将实体中的列表转换为数据库中的单个字符串列

东门清夷
2023-03-14
问题内容

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.asListArrayList转换器中,因为结果存储在属性中,对该列表所做的任何更改都将写回到数据库中-
因此,我需要一个可更改的列表(我无法在的结果中添加任何内容Arrays.asList)。在 2.1之前的
解决方案中,结果未与属性关联,并且可变列表不会与属性同步。

要查询包含此类属性中特定项目的实体,请在此处查看我的答案



 类似资料:
  • 问题内容: 我有一个清单说: 如何在不触及字符串的情况下转换预期的数字? 感谢您的帮助。 问题答案:

  • 本文向大家介绍在Java中将字符列表转换为字符串,包括了在Java中将字符列表转换为字符串的使用技巧和注意事项,需要的朋友参考一下 假设以下是我们的字符列表- 将字符列表转换为字符串- 示例 以下是在Java中将字符列表转换为字符串的程序- 输出结果

  • 我有一个字符串: 我需要将其转换为日期时间或字符串列表.... 我尝试 JsonDecode 它会引发格式异常: 未处理的异常:格式异常:意外的字符(在字符 6 处) [2022-04-14 15:51:10,2022-01-29 15:51:10] 如何从字符串中获取列表?

  • 假设我有以下数组列表: 并且必须遵守规则: 从数组列表 1 开始,我想形成新的以下数组列表: <李>猫狗 <李>鼠蛇 无论如何都可以这样做。我目前还没有找到任何字符串到字符串转换的内容。

  • 我试图将JSON解析到我的对象。json的一个字段包含[1,2,3,4],这是一个int s的列表。但是我的objects字段包含

  • 我对任何编程都非常陌生,所以请原谅我的无知,因为我不知道如何做一些看起来很简单的事情。 我所要做的就是获取任何字符串数组(称之为名称),比如: 并将其从列表中删除,并将其转换为字符串: 我似乎无法理解这一点,也找不到类似的帖子。