嗨,我正在尝试处理一些员工对象并在数据库中持久化。服务层可能会从DAO层获取异常。但是我仍然需要处理其他员工记录。

请查看下面的类示例。在这里,类A.processEmployees()调用了另一个类EmpHandler,该类调用了DAO。即使某个员工遇到了一些例外情况,我也需要处理其他员工并将其保留在数据库中。但是,我以org.hibernate.HibernateException的形式获取异常:当前事务未在进行中

@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
Class A
{

 public void processEmployees(List<Employee> empList)
 {
   for (Employee emp : empList)
     new EmpHandler().processEmployee(emp);
 }

}

最佳答案

通过调用new方法创建EmpHandler。因此,Spring Framework和其他一些容器无法处理这些方法。您不应该自己创建EmpHandler对象。 Spring Framework应该创建该对象。

您可以执行以下操作:

Class A
{

    private IEmpHandler handler;

    public void setEmpHandler(IEmpHandler handler) {
        this.handler = handler;
    }

    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void processEmployees(List<Employee> empList)
    {
        for (Employee emp : empList)
            handler.processEmployee(emp);
    }
}

class EmpHandler implements IEmpHandler {
    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void processEmployee(...) {
    }
}


在您的context.xml中:

<bean id="handler" class="...EmpHandler"/>

<bean id="a" class = "...A">
    <property name="handler" ref="handler"/>
</bean>

09-10 03:01