SpringBoot JPA TransactionRequiredException при вызове saveAndFlu sh - PullRequest
0 голосов
/ 01 апреля 2020

Я пишу REST-сервер SpringBoot. У меня есть некоторые проблемы со слоем доступа к данным. В моем сервисном методе saveReport (), если я вызываю метод save () репозитория JPA, я не вижу никаких записей в БД. Если я использую метод saveAndFlu sh () репозитория JPA, я получаю следующее исключение:

Caused by: javax.persistence.TransactionRequiredException: no transaction is in progress

Db config class:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
  entityManagerFactoryRef = "qaEntityManagerFactory",
  basePackages = { "qa.repository" }
)
public class QADbConfig {

  @Bean(name = "qaDataSource")
  @ConfigurationProperties(prefix = "spring.qa-datasource")
  public HikariDataSource dataSource() {
    return DataSourceBuilder.create().type(HikariDataSource.class).build();
  }

  @Bean(name = "qaEntityManagerFactory")
  public LocalContainerEntityManagerFactoryBean 
  entityManagerFactory(
    EntityManagerFactoryBuilder builder,
    @Qualifier("qaDataSource") DataSource dataSource
  ) {
    return builder
      .dataSource(dataSource)
      .packages("qa.model")
      .persistenceUnit("qa")
      .build();
  }

  @Bean(name = "qaTransactionManager")
  public PlatformTransactionManager transactionManager(
    @Qualifier("qaEntityManagerFactory") EntityManagerFactory 
    entityManagerFactory
  ) {
    return new JpaTransactionManager(entityManagerFactory);
  }
}

В своем слое обслуживания я добавил @ Транзакционный

@Service
public class ReportService implements IReportService {
  static final ObjectMapper objectMapper = new ObjectMapper();

  @Autowired
  ReportRepository reportJpaRepository;

  @Transactional(propagation=Propagation.REQUIRED)
  @Override
  public Report saveReport(Report report) {
    reportJpaRepository.save(report); // I get no transaction exception if I use saveAndFlush method here
    return report;
  }

Также в классе репозитория я добавил @ Транзакционный

@Transactional
@Repository
public interface ReportJpaRepository extends JpaRepository<Report, Integer> {
  List<Report> findByPrivateReport(Boolean privateReport);
}

Вы видите, что не так с моим кодом?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...