Spring Data + Hibernate возвращают значения NULL с одновременным доступом к таблице - PullRequest
0 голосов
/ 28 марта 2019

Это мой код уровня сервиса:

@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

...