gpt4 book ai didi

java - @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 不起作用

转载 作者:行者123 更新时间:2023-12-01 07:55:20 25 4
gpt4 key购买 nike

我需要在 glassfish3.0 上使用 JPA 2.0 和 EJB3.0 删除忽略任何完整性约束的员工列表(即成功删除尚未与任何其他实体相关的实体或跳过与其他实体相关的实体) :

我迭代列表并在 try/catch 中的 require_new 事务中调用实体管理器,我希望这将在大事务中打开小嵌套事务,并且我使用 em.flush() 强制更新。

但在相关实体的迭代中它会抛出;

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.2.v20130514-5956486): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails

并继续到下一个员工,但在提交大事务时它会回滚并抛出相同的异常!

我希望在新的小事务中抛出/捕获异常,并提交列表其余部分的成功删除的实体...

我错过了什么吗?

编辑:

下面是一些代码,Facade中调用实体管理器移除bean的代码,我用required-new注释了该函数:

 public void deleteEmployeeData(Set<Employees> deleted) throws DatabaseException {

Iterator itr;
Employees emp;


//delete unused recordes
try {

itr = deleted.iterator();

while (itr.hasNext()) {
emp = (Employees) itr.next();
deleteEmployee(emp);
}

} catch (Exception e) {
e.printStackTrace();
}

System.out.println("DONE");
}

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
private void deleteEmployee(Employees emp){
try {
this.remove(emp);
} catch (Exception ex) {
System.out.println(ex.getMessage());
}

}

最佳答案

deleteEmployee 方法未包装到新事务中,因为您正在引用 this 上的方法。您可以做的是注入(inject)对外观本身的引用,然后调用它的 deleteEmployee 方法(它应该是公共(public)的)。

或多或少是这样的:

@Stateless
public class MyFacade {
@EJB
private MyFacade self;

public void deleteEmployeeData(Set<Employees> deleted) throws DatabaseException {
...
try {
self.deleteEmployee(emp);
} catch (Exception ex) {
// ...
}
...
}

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void deleteEmployee(Employees emp) {
this.remove(emp);
}

}

关于java - @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30979209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com