微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

是否可以停止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将被认为处于持久状态的实体,然后我更新实体中的一些字段,然后将该实体传递给验证.如果验证失败,那么不要udpate,如果验证成功,那么持久化该实体.

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

让我想起我可以改变我做验证的方式,解决问题,所以我对解决方案不感兴趣.我有兴趣知道我如何能够禁用其自动更新持久性对象的hibernate功能.

请记住,我正在使用hibernate的JPA实现.所以Hibernate处理hibernate特定API的具体答案对我来说无效.

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

谢谢

–EDIT —
我找不到一个解决方案,所以我选择回滚事务,而不会抛出任何RuntimeException,即使我在一个声明式事务中使用:

TransactionInterceptor.currentTransactionStatus()使用setRollbackOnly();

它的作用就像一个魅力.

解决方法

原文地址:https://www.jb51.cc/java/125847.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐