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 の 2 つのエンティティがあります。従業員には雇用主へのリンクがあります。

私は持っている

@Stateless
EployerService {
 ....
 public void lockEmployer (long id) {
    Employer employer = employerDAO.findById(id);
    employer.setLocked(true);
    employerDAO.updateEmployer(employer);
    employeeDAO.updateEmployeesByEmployerId(id);
 }  
}

従業員DAOで

updateEmployeesByEmployerId (long empId) {
   em.createQuery("update Employee set locked = true where emplopyerId=:id").setParameter("id", empId).executeUpdate();

}

雇用者DAOで

udpateEmplopyer(Employer employer) {
  em.merge(employer);
}

両方のdaoのすべてのロジックを1つのDAOに入れると、ロックはありません!

于 2012-06-19T16:36:03.177 に答える
0

持続性プロバイダーとして hibernate を使用している場合@TransactionAttribute(REQUIRES_NEW)、ビジネス メソッドで呼び出されるトランザクション アノテーションが提供されます。このアノテーションは、別のトランザクションでメソッドを実行します。したがって、JPAにはこれに代わるものがあるはずです。しかし、よくわかりません。

于 2012-06-14T12:49:42.293 に答える