Java JPA实体更新数据库而不进行持久化/合并

Java JPA实体更新数据库而不进行持久化/合并,java,entity-framework,hibernate,jpa,toplink,Java,Entity Framework,Hibernate,Jpa,Toplink,我们的java应用程序使用Toplink JPA将数据访问层连接到SQL Server 2008数据库 我们可以查询数据库,并得到我们的结果没有任何问题。问题是,如果我们尝试更改返回的实体,它会在调用setter后立即保留到数据库中 Query rQuery = em.createNamedQuery("Region.findAll"); Region r= rQuery.getResultList(); r.setActive(active); 从我们在JPA上读到的内容来看,在调用pers

我们的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,我们不知道还有什么可以尝试。
如果有人对如何解决此问题有任何其他建议,我将不胜感激。

如果您对实体的更新代码是在标记有事务的方法中完成的,那么在该方法结束时,将提交更改,因为事务必须在关闭前提交任何更改

如果实体已分离,您对该实体进行了一些更改,需要重新附加该实体并在数据库中合并更新,则使用“合并”

解决方案是使用事务属性为“Require\u new”的不同方法查询数据,并将结果集传递给使用事务属性为“required”或“mandatory”进行更新的方法