我有 3 个 EJB 无状态 bean。A - 在业务层上。B、C——持久层。
Bean A 调用 B 和 C 来更新数据库 (DB2) 中的一些数据。
但不幸的是,在调用 bean C 时,数据库锁定了。B 和 C 是否有可能在不同的事务中执行?否则我无法理解为什么 DB2 会锁定...
我有 3 个 EJB 无状态 bean。A - 在业务层上。B、C——持久层。
Bean A 调用 B 和 C 来更新数据库 (DB2) 中的一些数据。
但不幸的是,在调用 bean C 时,数据库锁定了。B 和 C 是否有可能在不同的事务中执行?否则我无法理解为什么 DB2 会锁定...
我有 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 中时 - 没有锁!
如果您使用 hibernate 作为持久性提供程序,那么它会提供一个@TransactionAttribute(REQUIRES_NEW)
在业务方法上调用的事务注释。此注释在单独的事务中运行该方法。所以我认为在 JPA 中应该有一个替代方案。但不确定。