Отсоединение объекта в JPA - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть модульный тест, который в основном выполняет следующие действия:

  1. Запрос объекта на основе критериев
  2. Изменение значения свойства этого объекта
  3. Обновить используя WHERE ID =?и an_attr =?

    // Given we have data inserted already
    ContextInfo ctx = createContextInfo();
    DocumentDescriptor desc = createDocumentDescriptor(ctx);
    // With status = NOT OK
    desc.setStatus("RESPONSE_NOTOK");
    dao.insert(ctx, desc);
    entityManager.flush();
    
    // When updating status with the correct last status
    desc = dao.findByDescriptorProperties(ctx, desc.getSelector(),
            desc.getTransaction(), desc.getType(), desc.getClientId());
    desc.setStatus("RESPONSE_OK");
    Query x = entityManager.createQuery("from " + desc.getClass().getSimpleName());
    List<DocumentDescriptor> res = x.getResultList(); // Watch [[THIS]] marker
    dao.updateWithOldTransactionStatus(ctx, desc, "RESPONSE_NOTOK");
    

Каким-то образом у маркера ([[THIS]]) я вижу, что Hibernate делает это:

2019-04-22 12:43:52,418 [main] DEBUG org.hibernate.engine.spi.ActionQueue - Changes must be flushed to space: DocumentDescriptor
2019-04-22 12:43:52,540 [main] DEBUG org.hibernate.SQL - update DocumentDescriptor set modTime=?, modTransactionId=?, modUser=?, techTransactionId=?, obsolete=?, status=?, docTimestamp=?, version=? where id=?

Thisне хочу, потому что я хочу обновить только значение вместе с другим атрибутом в качестве условия (см. следующую строку).Мне кажется, что объект (возвращаемый методом findByDescriptorProperties) не отделен.

1 Ответ

0 голосов
/ 22 апреля 2019

Мне кажется, что на самом деле флеш не происходит, когда вы звоните entityManager.flush().

Из-за спящего режима FlushMode обнаруживает потенциально устаревшие данные и сбрасывает сеанс перед запросом. Попробуйте установить его в РУЧНОЙ.

См. Спящий режим FlushMode

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