java - JPA Commit 与 Oracle 的问题

标签 java oracle jpa

我在使用 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/

相关文章:

java - 为什么我会收到 ORA-01438 错误

sql-server - SQL Server 模型子句

mysql - Spring Boot 不会从 application.properties 为数据库创建自动配置

java - 将变量传递给 Java 中的 ActionListener

Java - 面板与框架大小相同

java - Android 实现具有 hashmap 的 Parcelable 对象

java - JPA 是否支持可嵌入对象的一种 "Any"映射?

java - 如何判断JTextPane中所选文本的大小是否不同?

sql - GROUP BY 如果组中至少有一个值满足条件则创建组

java - JPA + EJB : Transactions with Native Queries