服务层

时间:2015-05-11 14:24:24

标签: spring hibernate spring-aop

在我们的应用程序中,我们使用服务层的注释来应用spring声明式事务。

在这里,我不知道如何正确处理异常。

我的要求是什么,当dao层抛出任何hibernate异常时我们正在回滚事务,但在一种情况下我得到InvalidDataAccessResourceUsageException因为发生了唯一的索引违规。所以我想在这里做的是我想在服务类中捕获InvalidDataAccessResourceUsageException异常,并且必须将特定于应用程序的异常重新抛出到控制器。

但是这里发生的事情是因为我们在服务层类中有事务划分,会话在执行方法后在服务层刷新(即当tx提交时),因此我无法将其捕获到相同的方法中并且它直接传播到控制器。

请建议我解决这个问题。

还要求再澄清一下,假设我有一个类似下面的方法

@Transactional(value="transactionManager",readOnly = false, propagation    = Propagation.REQUIRED,rollbackFor = HibernateException.class)  
public SomeDTO editObject(SomeDTO someDto, String user)   throws        EditException    {         
    try{
        /*  
        call to dao.edit(); 
        another call to anotherDao.addEditsTOAnotherTable();
        some business logic*/    
    } catch(HibernateException e){   
    } catch(InvalidDataAccessResourceUsageException ie){}    
}

我能否抓住上述例外情况。注意:我没有处理或抛出dao的任何异常。此外,在dao层没有像FlushMode.ALWAYS等会话缓存机制,因为它会在tx.commit()期间刷新。

1 个答案:

答案 0 :(得分:-1)

最好在编辑到数据库之前检查所有数据库约束