У меня есть модульный тест, который в основном выполняет следующие действия:
- Запрос объекта на основе критериев
- Изменение значения свойства этого объекта
Обновить используя 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) не отделен.