Я работаю над ошибкой. У меня есть файл Excel, который импортируется в приложение. Файл содержит информацию для основного объекта домена (Zoo, см. Ниже). Каждая строка имеет две ячейки, строковое значение для имени и значение int для количества животных.
Если у меня есть недопустимое поле в этом файле Excel, будет отображаться сообщение об ошибке типа "Ошибка при столбец X в ячейке Y. Значение "someValue" недопустимо ". Давайте предположим, что у нас есть файл Excel с 250 строками. Если в строке 200 есть недопустимая ошибка поля, в каждой строке, следующей за ней, выдается следующая ошибка
Validation error whilst flushing entity [com.rolotec.ost.Zoo]:
- Field error in object 'com.rolotec.ost.Zoo' on field 'ceo': rejected value [null]
Если я смотрю в БД, объект не является пустым поле ceo.
Здесь объекты домена.
class Zoo{
String name;
int animalsInTheZoo;
CEO ceo;
hasMany=[ zooEnclosures : ZooEnclosures]
constraints=[//some constraints]
}
class CEO{
Date ceoTillDate;
Person person;
constraints=[//some constraints]
}
class Person{
String name;
int age;
constraints=[//some constraints]
}
Служба импорта
class ImportService{
importExcel(){
String errorMsg="";
Zoo.withTransaction { status->
try{
//some other operations
for(int rowNum = excelFile.firstRow; rowNum<=excelFile.lastRow; rowNum++) {
try {
importRow(row);
} catch (Exception e) {
//doSomething
}
} //end for-loop
if (errorMsg != "") {
status.setRollback();
}
} catch(Exception e){
//doSomething with e
status.setRollback();
}
}
}
importRow(Row row){
String name = row.getCell(1).stringCellValue;
Zoo.findAllByName(name).each{
try{
//reads every cell in Excel data and validates the field
it.save() //error occures here in the validation
} catch(Exception e){
//doSomething with e
}
}
}
Если я проверю объект, он будет иметь значение для it.ceo.name, но остальное будет нулевым внутри it.ceo. Также будет it.ceo.person = null. В БД есть все значения для атрибутов.
РЕДАКТИРОВАТЬ: Если в файле Excel нет недопустимых полей, исключение ValidationException отсутствует. Все будет импортировано нормально.
РЕДАКТИРОВАТЬ 2: Добавлен for-l oop внутри метода importExcel ().