我遇到了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);
后,返回对象中的versionNo
字段值entity
仍然为零。然后将此对象传递给service.serializeEntity(entity);
,versionNo
将对象序列化为update
零。但是,在方法versionNo
返回后,数据库中的1
将更改为EntityA
。有没有办法在将未提交的修改后的service.serializeEntity(entity);
传递给{{1}}之前获取它,因为我需要序列化修改后的对象。
答案 0 :(得分:1)
您可以尝试拨打
persistenceManager.flush();
在merge()
电话之后。
即使事务尚未提交,也会强制更新数据库。