为什么@OneToMany关系重复?

时间:2016-03-18 23:00:12

标签: jpa eclipselink one-to-many

我在会话EJB(UpdateService)中有一个'save()'方法,它持久保存JPA实体Bean。 该方法首先删除与实体Bean的所有现有@OneToMany关系。比该方法创建新的关系并坚持它们。这一切都符合预期。

但现在我遇到了一种情况,即调用我的第一个会话Bean(UpdateService)的另一个Session EJB(SuperService)需要两次更新特定的JPA实体Bean。因此,在一次事务中,为同一实体调用UpdateService.save()方法两次。

我可以看到,在这种情况下,UpdateService.save()的第二次调用无法识别第一个调用已创建新关系(因此,不会被删除),因此它创建了一个额外的关系。结果,这种关系翻了一番。奇怪的是,作为我的实体bean属性一部分的其他数据已在第二次调用中更新。似乎只有待处理的新关系不可删除。

我已经将TransactionIsolation设置为TRANSACTION_READ_UNCOMMITTED,但没有效果。 所以我的问题是:我怎么能看到我的实体有未建立的新关系,以便我可以删除它们?

我正在使用MySQL在WildFly上运行EclipseLink 2.5。

这是我的EJB代码的简化部分:

....
manager.setFlushMode(FlushModeType.COMMIT);
...
activeEntity = manager.find(Entity.class, sID);
// remove current TextItem List
for (TextItem aItem : activeEntity.getTextItems())
    manager.remove(aItem);
activeEntity.getTextItems().clear();
..
//  update the relationships
for (Object asingleValue : valueList) {
    TextItem newItem = new TextItem(index.getName(),
                asingleValue.toString());
    manager.persist(newItem);
    activeEntity.getTextItems().add(newItem);
}
manager.flush();
manager.detach(activeEntity);
return statusResult;

0 个答案:

没有答案