0

我有 3 个 EJB 无状态 bean。A - 在业务层上。B、C——持久层。

Bean A 调用 B 和 C 来更新数据库 (DB2) 中的一些数据。

但不幸的是,在调用 bean C 时,数据库锁定了。B 和 C 是否有可能在不同的事务中执行?否则我无法理解为什么 DB2 会锁定...

4

2 回答 2

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 中时 - 没有锁!

于 2012-06-19T16:36:03.177 回答
0

如果您使用 hibernate 作为持久性提供程序,那么它会提供一个@TransactionAttribute(REQUIRES_NEW)在业务方法上调用的事务注释。此注释在单独的事务中运行该方法。所以我认为在 JPA 中应该有一个替代方案。但不确定。

于 2012-06-14T12:49:42.293 回答