Можно ли изменить экземпляр объекта с версией и получить инкрементную версию без использования flush? Потому что из того, что я читал, я боюсь, что очистка - не лучшая практика, потому что это плохо сказывается на производительности или даже повреждении данных? Я не уверен: D
Вот простой код, а также вывод в виде комментария:
/*
Hibernate: select receivingg0_.id as id9_14_, receivingg0_.creationDate as creation2_9_14_, ... too long
the version before modification : 16
the version after modification : 16
after merge the modification, the version is : 16
Hibernate: update ReceivingGood set creationDate=?, modificationDate=?, usercreate_id=?, usermodify_id=?, ... too long
after flushing the modification, the version is finally : 17
*/
public void modifyHeaderAndGetUpdatedVersion() {
String id = "3b373f6a-9cd1-4c9c-9d46-240de37f6b0f";
ReceivingGood receivingGood = em.find(ReceivingGood.class, id);
System.out.println("the version before modification : " + receivingGood.getVersion());
receivingGood.setTransactionNumber("NUM001xyz");
System.out.println("the version after modification : " + receivingGood.getVersion());
receivingGood = em.merge(receivingGood);
System.out.println("after merge the modification, the version is : " + receivingGood.getVersion());
em.flush();
System.out.println("after flushing the modification, the version is finally : " + receivingGood.getVersion());
}
В моем тесте версия увеличивалась после сброса. Экземпляр, возвращенный операцией слияния, не имеет увеличенной версии.
Но в моем случае Я хотел бы вернуть объект в свой webui в виде DTO, и объект должен иметь версию после сброса / фиксации, прежде чем преобразовывать его в DTO и возвращать его в пользовательский интерфейс для визуализации. И тогда пользовательский интерфейс может иметь последнюю версию и будет передавать эту версию для следующей отправки.
Есть ли способ получить последнюю версию без сброса?
Спасибо!
ОБНОВЛЕНИЕ
] По моему опыту, увеличение этого значения вручную может быть проблематичным, как видно из этого примера ниже. В этом примере у нас 2 сброса.
Первый - синхронизировать изменения в соединении с базой данных, чтобы вызов хранимой процедуры из того же соединения мог видеть изменения, сделанные из entityManager.
Второй флеш вызывается для получения окончательной версии. И мы видим, что это увеличивается вдвое . std :: transform (str.begin (), str.end (), str.begin (), :: tolower); И у меня вопрос: что значит :: before tolower? и std :: tolower не ...
Я видел такой код:
std::string str = "wHatEver";
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
И у меня вопрос: что означает ::
перед tolower?
и std :: tolower
не работает, но :: tolower
работает нормально