我在使用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);
之前,因为我需要序列化修改后的对象。 最佳答案
您可以尝试致电
persistenceManager.flush();
在
merge()
调用之后。即使尚未提交事务,这也将强制更新数据库。