【发布时间】:2013-01-24 15:54:03
【问题描述】:
又得麻烦你了……(见:CMT Transactions) 推测如下:
所有 TransactionAttributes 默认设置为 REQUIRED
问题:为什么即使先前的提交不应该发生,find 方法也能够检索 foo?确实发生了在调用 find() 时插入并选择了 Foo,但是为什么呢?此时交易尚未结束,因为 Bar 仍有待存储。
现在发生了以下情况(Bang = DuplicateKeyException):
问题:为什么 Foo 被保存?我认为 save(Foo foo) 的方法调用将成为 GlobalService 事务的一部分,注释为 REQUIRED
好的,也许 GlobalClient 感兴趣:
public void createFooBar(Foo foo, Bar bar) throws WrappedThingsGoneBadException
{
try
{
fooService.create(foo);
}
catch (Exception e)
{
e.printStackTrace();
}
fooService.doSomethingSilly();
try
{
foo = fooService.findByName(foo.getName());
}
catch (Exception e)
{
e.printStackTrace();
}
try
{
barService.create(bar);
}
catch (Exception e)
{
e.printStackTrace();
}
}
Foo-和BarService的保存方法:
public Foo create(Foo foo)
{
em.persist(foo);
return foo;
}
非常欢迎澄清!
【问题讨论】:
-
您在数据库中看到保存的 Foo 了吗?
-
"em" 是 javax.persistence.EntityManager,不是吗?
标签: jakarta-ee transactions ejb