Проверка существования объекта перед удалением или обновлением в Spring / Hibernate

Я использую комбинацию Spring / Hibernate для своего проекта со стандартными операциями CRUD.

Интересно, разумно ли проверять существование объекта перед его удалением или обновлением? Если да, то где лучше всего делать - сервис или уровень дао?

РЕДАКТИРОВАТЬ:
Извините, я сначала не обратил внимания, когда задал этот вопрос. Единственный мотив для проверки существования - бросить дружественное исключение клиенту службы (не специфично для 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); 
}

Дело в том, что я просто хочу генерировать дружественное исключение с соответствующим сообщением в случае упомянутых ситуаций (нарушения целостности и т.п.).

5
задан Brian Tompsett - 汤莱恩 24 July 2015 в 11:21
поделиться