代码之家  ›  专栏  ›  技术社区  ›  Jerome

Hazelcast MapStore和JPA存储库

  •  0
  • Jerome  · 技术社区  · 8 年前

    因为有很多天,我试图让一个Hazelcast MapStore与一个jparepository一起工作,但是我不能使它工作,因为我不能创建一个事务:

    org.springframework.dao.InvalidDataAccessApiUsageException: no transaction is in progress; nested exception is javax.persistence.TransactionRequiredException: no transaction is in progress
    

    我知道MapStore不参与文档中所述的Spring事务,但是如果需要,我希望显式地创建另一个事务。我试过了 TransactionTemplate 或 PlateformTransactioManager 但似乎没有效果:

      @Autowired
      private UuidSpringDataJpaRepository uuidSpringDataJpaRepository;
      @Autowired
      private PlatformTransactionManager platformTransactionManager;
    
    ...
    
      @Override
      public void storeAll(Map<String, V> map) {
        LOGGER.info("[{}, {}] storeAll: {}", tenant, cacheType, map);
        ClientDatabaseContextHolder.setTenantName(tenant);
        try {
          TransactionTemplate txTemplate = new TransactionTemplate(platformTransactionManager);
          txTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
          txTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus status) {
              for (Entry<String, V> entry : map.entrySet()) {
                storeUuidEntity(entry.getKey(), entry.getValue());
              }
              uuidSpringDataJpaRepository.flush();
            }
          });
        } finally {
          ClientDatabaseContextHolder.removeTenantName();
        }
      }
    

    我已经看到一些例子,比如 this 所以这可能是可行的,我想?

    谢谢你的帮助。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Gokhan Oner    8 年前

    @Transactional UuidSpringDataJpaRepository