【问题标题】:Deserialize and persist with @ManyToMany使用 @ManyToMany 反序列化和持久化
【发布时间】:2019-12-12 10:08:13
【问题描述】:

我有一个使用 MySQL 数据库的 Spring Boot 应用程序。 目前我正在尝试执行以下操作: - 反序列化 *.csv 文件中的实例; - 将它们注入 MySQL 数据库。

对于简单的实例,没有问题。但是,如果我有一个具有 ManyToMany 或 OneToMany 关系的对象,反序列化将无法正常工作。目前我正在使用 Jackson 依赖项进行 *.csv 反序列化:

    CsvMapper csvMapper = new CsvMapper();
    csvMapper.disable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY);
    CsvSchema csvSchema = csvMapper.schemaFor(type).withHeader().withColumnSeparator(';').withLineSeparator("\n");
    MappingIterator<Object> mappingIterator = csvMapper.readerFor(type).with(csvSchema).readValues(csv);

    List<Object> objects = new ArrayList<>();
    while (mappingIterator.hasNext()) {
        objects.add(mappingIterator.next());
    }

多对多的实例示例:(想法是一个应用可以有不同的版本)

public class Application {

private Long id;
private String name;

@OneToMany(mappedBy = "application")
private Set<Version> versions = new HashSet<>();
}

为了插入数据库,我使用的是 @Autowired 的 Spring Boot 实体。 我的第一个问题是 - 我应该将什么作为输入输入到 CSV 文件中以正确反序列化它?因为如果我有:

id;名字; 1;测试名称;

(跳过版本),我遇到了麻烦。即使我尝试将一些值放入版本中也是如此。所以我不知道如何正确地为杰克逊 CSV 反序列化提供输入,以防 SET + 之后,我怎样才能坚持这个实体?是不是应该先把所有的版本都放到DB里,然后再尝试把应用放到里面?

有什么想法吗?提前致谢!

【问题讨论】:

    标签: java mysql hibernate spring-boot csv


    【解决方案1】:

    使用 ApacheCommons 解析 csv。

    final byte[] sourceCsv;
    String csvString = new String(sourceCsv);
    CSVFormat csvFormat = CSVFormat.DEFAULT;
    List<CSVRecord> csvRecord = csvFormat.parse(new 
    StringReader(csvString)).getRecords();
    

    它将帮助您反序列化并存储在数据库中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      • 2018-06-14
      相关资源
      最近更新 更多