Слить и получить версию, которая должна быть обновлена, без сброса?

Можно ли изменить экземпляр объекта с версией и получить инкрементную версию без использования 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 работает нормально

12
задан Vadim Kotov 12 July 2018 в 13:59
поделиться