Hibernate - поиск после сохранения возвращает null в многопоточной среде - PullRequest
0 голосов
/ 31 октября 2019

Я работаю над весенним приложением, которое использует сеанс гибернации для каждой модели запроса. Я сталкиваюсь с проблемой, когда даже после сохранения и сброса сущности в одном потоке второй поток не может найти ту же сущность.

  public synchronized Entity generateAndSaveEntity() {
    log.debug("Generating entity");
    final Entity entity = repository.getLatestEntity();
    log.info("Existing Entity: {}", entity);
    final Invoice savedEntity = repository.saveAndFlush(invoice);
    log.debug("Saved Entity: {}", repository.getLatestEntity());
    return savedEntity;
  }

Метод драйвера выглядит следующим образом:

  @Test
  public void testEntityCreation_parallelRequests_generatesUniqueEntities() {
    CompletableFuture<Entity> r1 = CompletableFuture.supplyAsync(
        () -> generateAndSaveEntity());
    CompletableFuture<Entity> r2 = CompletableFuture.supplyAsync(
        () -> generateAndSaveEntity());
    CompletableFuture<Void> future = CompletableFuture.allOf(r1, r2)
        .thenRunAsync(() -> assertEntitiesAreUnique(r1.join(), r2.join()));
    future.join();
  }

Бревна

2019-10-31 21:24:46.158  INFO 51046 --- [onPool-worker-2] c.h.a.k.s.impl.DefaultService     : Generating entity
2019-10-31 21:24:46.192  INFO 51046 --- [onPool-worker-2] c.h.a.k.s.impl.DefaultService     : Existing Entity: Optional.empty
2019-10-31 21:24:46.332  INFO 51046 --- [onPool-worker-2] c.h.a.k.s.impl.DefaultService     : Saved Entity: Optional[Entity(foo=bar)]
2019-10-31 21:24:46.332  INFO 51046 --- [onPool-worker-1] c.h.a.k.s.impl.DefaultService     : Generating entity
2019-10-31 21:24:46.334  INFO 51046 --- [onPool-worker-1] c.h.a.k.s.impl.DefaultService     : Existing Entity: Optional.empty
2019-10-31 21:24:46.369  INFO 51046 --- [onPool-worker-1] c.h.a.k.s.impl.DefaultService     : Saved Entity: Optional[Entity(foo=bar)]

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