Spring JPA - 无法在while循环中更新,插入工作

时间:2016-08-08 15:10:54

标签: java spring jpa spring-data-jpa

我使用spring data / jpa来执行一些数据库操作。我有一个while循环运行并在运行时成功插入数据,但我还需要在每次运行while循环结束时进行更新操作。这基本上就是我在一个简单的例子中所拥有的。这正是我正在使用的结构。

做所有操作的类:

@Component
public class MyClassImpl implements MyClass {
    @Autowired
    MyOtherClass myOtherClass;

    @Override
    public void run() {
        while (expression) {
            // get some data into and entity object

            myOtherClass.insertMethod(entity);
            myOtherClass.updateMethod(entityId);
        }
    } 

}

我的另一堂课:

@Component
public class MyOtherClassImpl implements MyOtherClass {

    @Override
    JpaClass jpaClass;

    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void insertMethod(EntityObject entity) {
         jpaClass.save(entity);
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void updateMethod(String entityId) {
         EntityObject entity = jpaClass.findById(entityId);
         //change something on the entity
         jpaClass.save(entity);
    }
}

实体对象:

public interface JpaClass extends JpaRepository<EntityObject, Long> {
      EntityObject findById(String entityId);
}

我遇到的问题是插件工作得很好,但在while循环中我无法获得任何更新,就像我拥有它们一样。我试过移动逻辑并将findById逻辑放在不同的方法中,但无法使其工作。我试图在表中更新1行,处理1值,然后我需要在下一次运行while循环时引用它。

所以它是:

  1. 获得价值
  2. 使用值
  3. 进行操作
  4. 更新价值
  5. 重复
  6. 我使用spring @Configuration在一个适用于所有事务的类上设置数据库配置,以供参考它基本上设置如下:

    @Configuration
    @EnableTransactionManagement
    @PropertySource(value = { "classpath:/${app.execution.environment}/application.properties" })
    @EnableJpaRepositories(basePackages = "com.example", entityManagerFactoryRef = "mysqlEntityManager", transactionManagerRef = "mysqlTransactionManager")
    public class MysqlHibernateConfig {
    
    // all the needed beans here
    }
    

    也是为了确认,我在没有while循环的情况下运行了这个逻辑,并且数据确实按预期更新,所以问题出在数据库事务中的某个地方,但我仍然坚持如何解决它。

0 个答案:

没有答案