Я использую для своего проекта комбинацию Spring / Hibernate со стандартными операциями CRUD.
Интересно, разумно ли проверять существование объекта перед его удалением или обновлением? Если это так, где наиболее подходящее место - сервис или слой дао?
EDIT:
Извините, я не сразу понял, когда задал этот вопрос. Единственный мотив для проверки существования - бросить дружественное исключение клиенту службы (без DAO).
Проблема в том, что я «должен» выполнить проверку существования, потому что мой метод обслуживания ниже транзакционный, и, кроме того, я использую вспомогательные классы HibernateTemplate и DaoSupport для манипулирования сеансами в объектах DAO.
В соответствии с упомянутым выше, исключение Hibernate (например, в случае удаления несуществующего экземпляра) генерируется во время принятия, что вне моей досягаемости, потому что (я полагаю) принятие выполняется PlatformTransactionManager в прокси-объекте, и я у меня нет возможности обработать это исключение в моем методе обслуживания и повторно выдать дружественное исключение клиенту.
Но даже если я сохраняю свою стратегию для проверки существования перед удалением, плохо то, что у меня возникают проблемы с NonUniqueObjectException в случае, если экземпляр существует, потому что я повторно присоединяю (во время удаления) уже загруженный экземпляр (в режиме чтения). своевременность проверки наличия).
Например:
//Existence checking in this example is not so important
public void delete(Employee emp){
Employee tempEmp=employeeDao.read(emp.getId());
if(tempEmp==null)
throw new SomeAppSpecificException();
}
//Existence checking in this example is maybe 'more logical'
public void save(Assignment a){
Task t=taskDao.read(a.getTask().getId());
if(t==null)
throw new FriendlyForeignKeyConstraintException();
Employee e=employeeDao.read(a.getEmployee().getId());
if(e==null)
throw new EmployeeNotFoundExc();
//...some more integrity checking and similar...
assignmentDao.save(a);
}
Дело в том, что я просто хочу вывести дружественное исключение с соответствующим сообщением в случае упомянутых ситуаций (нарушения целостности и тому подобное).