我在使用 Oracle 数据库时遇到问题。我正在尝试更新一个实体并将更新后的实体传递给同一事务中的另一个方法。这适用于 mysql
数据库,但不适用于 Oracle
数据库。
实体类
public class EntityA
{
private Long id;
@Version
private Integer versionNo;
//getters and setters
}
@Transactional //From Spring
public class EntityService
{
@Inject
@Named("myService")
private MyService service;
public void modify(final EntityA data)
{
EntityA entity = persistenceManager.merge(data);
service.serializeEntity(entity);
}
}
所以问题是,在调用 persistenceManager.merge(data);
之前,versionNo
字段仍然为零。调用persistenceManager.merge(data);
后,返回对象(即entity
)中的versionNo
字段值仍然为零。然后,该对象被传递给 service.serializeEntity(entity);
,该对象将 versionNo
序列化为 0。但在update
方法返回后,数据库中的versionNo
变为1
。有没有办法在将未提交的修改的 EntityA
传递给 service.serializeEntity(entity);
之前获取它,因为我需要序列化修改的对象。
最佳答案
你可以尝试打电话
persistenceManager.flush();
在 merge()
调用之后。
即使事务尚未提交,这也会强制更新数据库。
关于java - JPA Commit 与 Oracle 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18190933/