【发布时间】: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