Sorry it's maybe an easy question but I can't find anything on Google. I'm parsing csvData with e.g. more than 100000 rows / objects. I want to check that ALL values for the attributes are valid before they get written into the database. Annotations like @Size
or @Length
do not help...
To give you an example:
Entity:
@Entity
@Data
public class Transaction {
@Size(max = 30)
private String timestamp;
}
The csv is parsed and the objects are written down in a List.
List<Transaction> transaction = new ArrayList<>();
// list will be filled
try {
databaseConnector.saveAllTransactions(transaction, transactionRepository);
} catch (ConstraintViolationException exc) {
System.out.println(exc.getMessage());
}
The error that appears after the 5th object.
Hibernate: insert into transaction (amount, customer_customer_id, discount, receipt_no, receipt_pos_no, timestamp, unit_price) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into transaction (amount, customer_customer_id, discount, receipt_no, receipt_pos_no, timestamp, unit_price) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into transaction (amount, customer_customer_id, discount, receipt_no, receipt_pos_no, timestamp, unit_price) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into transaction (amount, customer_customer_id, discount, receipt_no, receipt_pos_no, timestamp, unit_price) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into transaction (amount, customer_customer_id, discount, receipt_no, receipt_pos_no, timestamp, unit_price) values (?, ?, ?, ?, ?, ?, ?)
Validation failed for classes [com.stuff.project.entity.Transaction] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='muss zwischen 0 und 30 liegen', propertyPath=timestamp, rootBeanClass=class com.stuff.project.entity.Transaction, messageTemplate='{javax.validation.constraints.Size.message}'}
]
Only that you know how the method looks like.
public boolean saveAllTransactions(List<Transaction> transactions, TransactionRepository transactionRepository) {
transactionRepository.saveAll(transactions);
return true;
}
The only thing I could imagine is to go through the whole list of objects and check for each object the attributes for it's length like:
transactions.forEach(e -> e.getTimestamp().length != 30); ....
That does not seem to be very performance friendly...