我有3个EJB无状态bean。 A - 在业务层。 B,C - 持久层。
Bean A调用B和C来更新数据库(DB2)中的一些数据。
但不幸的是,在调用bean C时,数据库锁。 B和C可能在不同的交易中执行吗?否则我无法理解DB2锁定的原因......
答案 0 :(得分:0)
如果您使用hibernate作为持久性提供程序,那么它会在业务方法上提供名为@TransactionAttribute(REQUIRES_NEW)
的事务注释。此批注在单独的事务中运行该方法。所以我认为在JPA中应该有替代方案。但不确定。
答案 1 :(得分:0)
我有JBoss AS 7。 我有两个实体Employer和EMployee。员工与雇主有联系。
我有
@Stateless
EployerService {
....
public void lockEmployer (long id) {
Employer employer = employerDAO.findById(id);
employer.setLocked(true);
employerDAO.updateEmployer(employer);
employeeDAO.updateEmployeesByEmployerId(id);
}
}
在EmployeeDAO中
updateEmployeesByEmployerId (long empId) {
em.createQuery("update Employee set locked = true where emplopyerId=:id").setParameter("id", empId).executeUpdate();
}
在EmployerDAO
udpateEmplopyer(Employer employer) {
em.merge(employer);
}
当我把两个dao中的所有逻辑放在一个DAO中时 - 没有锁!