org.hibernate.HibernateException:当前事务未在进行中

时间:2014-02-21 10:12:06

标签: java hibernate spring-mvc

您好我正在尝试处理一些Employees对象并坚持使用数据库。服务层可能会从DAO层获得异常。但我仍然需要处理其他员工记录。

请查看下面的课程示例。这里,Class A.processEmployees()调用其他调用DAO的类EmpHandler。即使员工有一些例外,我也需要处理其他员工并在数据库中保留。但是,我得到的异常为 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);
 }

}

1 个答案:

答案 0 :(得分:0)

通过调用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>