Я пишу 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);
}
Вы видите, что не так с моим кодом?
Спасибо