【发布时间】:2014-09-02 09:40:50
【问题描述】:
我们的 Java 应用程序正在使用 Toplink JPA 将数据访问层连接到我们的 SQL Server 2008 数据库。
我们可以毫无问题地查询数据库并获得我们的结果。问题是,如果我们尝试更改返回的实体,它会在调用 setter 后立即保存到数据库中。
Query rQuery = em.createNamedQuery("Region.findAll");
Region r= rQuery.getResultList();
r.setActive(active);
从我们在 JPA 上阅读的内容来看,它似乎不应该在调用 persist/merge/flush 之前将更改发送到数据库。这是我们希望拥有的行为。我们希望能够进行所有更改,然后一次性发送所有更改。如果我们一次发送一个,但出现错误,我们最终可能会得到部分更新的记录。
我尝试将实体管理器刷新模式设置为提交,以强制它在持久化之前等待提交调用,但没有任何区别。
em.setFlushMode(FlushModeType.COMMIT);
我也尝试在调用 setter 之前分离返回的实体,但它会引发异常。
java.lang.AbstractMethodError: oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.detach(Ljava/lang/Object;)
这是我们第一次使用 Toplink JPA,我们不知道还能尝试什么。 如果有人对如何解决此问题有任何其他建议,我将不胜感激。
【问题讨论】:
标签: java entity-framework hibernate jpa toplink