java - 如何在 hibernate/JPA 中禁用自动更新

标签 java hibernate jpa orm

是否可以阻止 hibernate 自动更新持久对象?

    @Transactional
    public ResultTO updateRecord(RequestTO requestTO) {

        Entity entity = dao.getEntityById(requestTO.getId());

         // now update the entity based on the data in the requestTO

         ValidationResult validationResult = runValidation(entity);

         if(validationResult.hasErrors()) {
            // return ResultTO with validation errors
         } else {
             dao.persist(entity);
        }
    }

下面是代码中发生的事情,我检索了 hibernate 认为处于持久状态的实体,然后我更新了实体中的一些字段,然后将实体传递给验证。如果验证失败,则不更新,如果验证成功,则保留该实体。

这是此流程的主要问题:因为我更新了要在验证中使用的实体,所以我是否调用 persist() 方法(在 DAO 上)并不重要,记录将始终是已更新,因为 hibernate 检测到实体已更改并将其标记为更新。

请记住,我可以更改验证方式并解决问题,因此我对解决方法不感兴趣。我很想知道如何禁用自动更新持久对象的 hibernate 功能。

请记住我使用的是 hibernates 的 JPA 实现。所以处理 Hibernate 特定 API 的 Hibernate 特定答案对我不起作用。

我试图寻找 hibernate 配置,看看我是否可以设置任何配置来阻止这种行为,但没有成功。

谢谢

--编辑--- 我找不到解决这个问题的方法,所以我选择回滚事务而不抛出任何 RuntimeException,即使我在声明性事务中使用:

TransactionInterceptor.currentTransactionStatus().setRollbackOnly();

这就像一个魅力。

最佳答案

关于java - 如何在 hibernate/JPA 中禁用自动更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12223314/

相关文章:

Java Applet PDF 打印

Spring 启动: Is this correct way to save a new entry which has ManyToOne relationship?

java - 重构重复和高度耦合的代码

java - 如何存储巨大的瓦片 map ?

java - 通过 Java 应用程序启动外部 Jar

java - HQL Like 不返回任何内容

java - 如何使用JPA查询方法从表中选择两列的所有数据

java - Hibernate:外键的列数错误。应该是 1

java - 自动生成 key

java - OpenJPA:分离 EntityManager.close() 上的所有实体