所以我们使用注解来指定一个类需要这样的事务:
@TransactionAttribute (TransactionAttributeType.REQUIRED)
public class Foo() {
...
}
在该类中实际更改数据库的代码位中,我们发现这些更改对该类中的其他代码部分不可见,有时甚至是下一行。所以我们设法通过刷新查询来让事情正常进行,这感觉真的很奇怪。我原以为注释会使事务正常运行,但似乎我们必须进行大量按摩才能使其正常工作。
我花了很多时间在谷歌上搜索,我发现是指在 xml 文件中使用这个注释,而不是在代码中使用。我希望有人可以解释代码的行为,或者至少可以将我指向一个实际专门处理 @ 注释的网站。
编辑:我们正在使用 JBoss 和 hibernate,这是一个不起作用的快速代码示例
System.out.println("before:" + some_obj.getName());
util = (UtilFacade) EJBFactory.lookup(UtilFacadeBean.class);
some_object.setName("changed");
util.persistEntity(some_obj);
util.refreshEntity(some_obj); // reloads the object to get fresh data
System.out.println("after:" + some_obj.getName());
此代码的输出如下:
>>before:start name
>>after:start name
但我们希望第二个显示 >>after:changed
我们设法通过添加 util.flush(); 来解决这个问题。在调用 util.persistEntity() 之后。
对 util 的调用依赖于利用休眠 API 的 EntityManager。
如果我的问题不清楚,请告诉我您还想知道什么,我会尝试编辑它。
提前致谢!