如何在EJB中提交事务?

我有以下场景,

public void someEjbMethod1() { for (int i=0; i=10; i++) { em.merge(arr[i]); em.flush(); } } 

我需要分别合并( arr[i] )的每个对象。 因为上面的代码将提交函数末尾的所有arr[i]实例。

我想做以下事情:

 public void someEjbMethod1() { for (int i=0; i=10; i++) { saveObj(arr[i]); } } // should I use a transaction attribute here?? public void saveObj(SomeObject obj) { em.merge(arr[i]); em.flush(); } 

如果需要容器管理的事务,可以使用值为TransactionAttributeType.REQUIRES_NEW的@TransactionAttribute来将saveObj方法注释为:

 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void saveObj(SomeObject obj) { ... } 

这将确保每次调用saveObj方法时都会启动一个新事务。 在每次调用saveObj方法之前,将暂停与someEjbMethod关联的现有事务。 为saveObj方法启动的每个事务都将在返回时提交,因此每个实体都将在其自己的事务中在数据库中更新。

您可以请求UserTransaction,看看这里有一些灵感。