嗨,我正在尝试处理一些员工对象并在数据库中持久化。服务层可能会从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>