从我的客户机应用程序中,我希望在一个ejb方法中调用store和refresh,而不是在两个方法中调用两个。我做了一个ejb方法,让它调用另外两个ejb方法,它看起来很简单,如下所示:

 public ZippedObjectWrapper saveAndRefresh(final Item p_item) {
    Long itemSavedId= save(p_item);
    return refresh(itemSavedId);
  }

问题是toplink不允许我读取数据,在刷新部分引发异常:
例外情况[TopLink-7123]
异常描述:已对此UnitOfWork调用了成功的writeChanges()。由于提交过程已启动但尚未完成,现在只支持提交、commitndresume、release、任何非对象级查询或sqlcall执行。此时不允许执行操作executequery(objectlevelreadquery)。
有什么建议吗?
编辑:更改了方法签名。

最佳答案

不确定save()方法的作用,但我假设您正在对UnitOfWork调用writeChanges()。
在您使用的版本中,writeChanges()之后不允许查询。删除writeChanges()可以解决此问题。
如果升级到EclipseLink和JPA,则可以在事务中多次使用flush()并在之后查询。您也可以使用repeatablewriteUnitOfWork而不是unitOfWork来启用对writeChanges()的多个调用并允许查询。

07-24 09:32