Я использую OpenCSV 5.0 для анализа моего csv с HeaderColumnNameTranslateMappingStrategy
. Это работает хорошо, и у меня не было проблем с использованием примитивных типов данных, таких как String, int, boolean et c.
, потому что кто-то просил об этом. file
является частью requestParams метода.
@RequestParam("file") MultipartFile file
Но теперь у меня есть атрибут, который является объектом другого класса.
@JoinColumn(name = "article$ean", referencedColumnName = "ean")
@OneToOne(cascade = CascadeType.ALL)
private Article article$ean;
Когда CsvToBean анализирует элементы, выдает ошибку для каждого элемента:
Konvertierung von 010000 in de.iis.databaseHub.entity.Article fehlgeschlagen.
Переведено на английский sh:
Conversion from 010000 to de.iis.databaseHub.entity.Article failed.
Моя сущность (сокращенная) выглядит так:
@Entity
@Data //lombok annotation
public class Transaction implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long transactionId;
@Size(max = 30)
private String timestamp;
private int receiptNo;
private int receiptPosNo; // (e.g. 1-x then again 1-y)
@JoinColumn(name = "article$ean", referencedColumnName = "ean")
@OneToOne(cascade = CascadeType.ALL)
private Article article$ean;
}
Мой парсер работает так. entry.getKey()
устанавливает класс сущности, а entry.getValue()
устанавливает отображение
List<Transaction> transaction = new ArrayList<>();
HeaderColumnNameTranslateMappingStrategy strategy = new HeaderColumnNameTranslateMappingStrategy();
strategy.setType(entry.getKey());
strategy.setColumnMapping(entry.getValue());
Reader reader = new InputStreamReader(file.getInputStream());
CSVParser parser = new CSVParserBuilder().withFieldAsNull(CSVReaderNullFieldIndicator.EMPTY_SEPARATORS)
.withSeparator(delimiter).withIgnoreQuotations(false).build();
CSVReader csvReader = new CSVReaderBuilder(reader).withSkipLines(0).withCSVParser(parser).build();
CsvToBean<?> csvToBean = new CsvToBean<>();
csvToBean.setThrowExceptions(false);
csvToBean.setMappingStrategy(strategy);
csvToBean.setCsvReader(csvReader);
if (entry.getKey().equals(Transaction.class)) {
transaction.addAll((Collection<? extends Transaction>) csvToBean.parse());
transaction.forEach(e -> System.out.println(e));
}
Как я могу справиться с этим?