Это мой код уровня сервиса:
@Override
public String getPreview(final String id) {
final String preview = findOneById(id).getPreview();
if ( id.equals("5065b6dd-7d61-4187-834b-2a0355c0b9e8") && preview == null || "".equals(preview)) {
LOG.error("!!!!!!!!!!!!!!!!!!!!!!!!! PREVIEW IS EMPTY");
}
return preview;
}
private Entity findOneById(final UUID id) {
return metadataRepository.findById(id).orElseThrow(() -> new NotFoundException("File not found"));
}
Когда я использую этот код с последовательным доступом, он работает нормально, возвращается предварительный просмотр и сообщение журнала не создается.
Но когда этот код получает 4+ одновременно работающих пользователей, он возвращает ноль и появляется сообщение журнала.
Мой сервис помечен как org.springframework.transaction.annotation.Transactional
это моя конфигурация гибернации:
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(@Value("${spring.datasource.url}") final String jdbcUrl,
final JpaVendorAdapter jpaVendorAdapter,
final DataSource dataSource) {
final LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();
entityManagerFactory.setDataSource(dataSource);
entityManagerFactory.setPackagesToScan(PERSISTENCE_PACKAGE);
entityManagerFactory.setJpaVendorAdapter(jpaVendorAdapter);
final Map<String, Object> properties = entityManagerFactory.getJpaPropertyMap();
properties.put("connection.driver_class","org.postgresql.Driver");
properties.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQL95Dialect");
properties.put("hibernate.connection.url", jdbcUrl);
properties.put("hibernate.cache.use_second_level_cache", "false");
properties.put("hibernate.cache.use_query_cache", "false");
properties.put("hibernate.format_sql", "true");
properties.put("hibernate.jdbc.batch_size", "25");
properties.put("hibernate.order_inserts", "true");
properties.put("hibernate.order_updates", "true");
return entityManagerFactory;
}
Где я допустил ошибку?
эта проблема похожа на параллелизм данных Spring