如何在 EJB 中提交事务?

Muh*_*edy 0 java ejb transactions

我有以下场景,

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

我需要分别合并 ( 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();
}
Run Code Online (Sandbox Code Playgroud)

Vin*_*lds 6

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

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void saveObj(SomeObject obj)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

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