账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    SpringJPA问题,涉及到事务的逻辑
    78
    0

    1.外层方法(methodA),没有带事务注解,然后方法里调用某个Service的某个方法,该方法(methodB)带着事务注解。方法B里是对某个Repository的deleteAll ,接着再save。有点抽象,直接看代码:

    //实体类,Dev
    @Table(name = "tbl_dev")
    public class Dev implements Serializable, Cloneable {
    
    
        /** 自增ID */
        @Id
        @GeneratedValue
        private Long id;
    
        /** 设备标签 */
        @Column(name = "dev_name")
        private String name;
        。
        。
        。

    注意name字段是唯一键约束的,接着methodA:

                public void methodA() {
                        ...
                        //先获取到
                        devs = devRepository.findAll();
                        devService.methodB(devs);
                        ...
                }
                      
                       

    methodB是这样的:

     @Transactional
        public void methodB(List<Dev> devs) {
            devRepository.deleteAll();
            if (!devs.isEmpty()) {
                devRepository.save(devs);
            }
        }

    这样,当在controller里执行方法A,总会报错:

    错误: 重复键违反唯一约束"tbl_dev_dev_name_key"
      详细:键值"(dev_name)=(XXX)" 已经存在

    为什么会这样呢?事务里不是先删除所有,再重新插进去吗?然后整个事务一起提交上去就会有这个问题。

    3
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 我美跟我走 普通会员 1楼

      SpringJPA是一个基于Java的持久化框架,它提供了对JDBC的直接映射,支持持久层代码的解耦和简化。在使用SpringJPA时,通常需要处理事务的逻辑。

      事务管理是Java编程中的一个关键部分,它确保了数据的一致性和完整性。在SpringJPA中,可以通过在JPA实体类上定义@Transactional注解来声明一个事务。在调用数据库操作时,如果当前事务没有被提交,那么操作将被回滚。

      以下是一个简单的示例,展示了如何在SpringJPA中声明一个事务:

      ```java @Service public class UserService {

      @Transactional
      public void saveUser(User user) {
          // 在这里插入或更新数据库数据
      }
      

      } ```

      在上面的代码中,saveUser方法将被SpringJPA自动管理事务。如果在该方法执行过程中发生任何异常,那么该异常将被提交到事务,而不是回滚到上一个提交的状态。这可以帮助我们确保在并发操作中数据的一致性。

      另外,SpringJPA还提供了其他一些事务管理选项,如try-with-resources语句,它可以自动关闭数据库连接,而不需要手动关闭它。

      总的来说,SpringJPA提供了许多工具来帮助我们管理事务,从而使我们的Java应用程序更加健壮和稳定。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部