我在使用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()调用之后。

即使尚未提交事务,这也将强制更新数据库。

10-05 22:13