Может ли hibernate помочь в добавлении/обновлении строки по ключу/ключам

247
08 августа 2017, 14:39

Добрый день Есть сущность Example с полями: id, name, type, values..

Требуется найти строчку по ключу name, type и обновить значения values. Если такой строчки не обнаружено, то вставить новую. Констрейн (name, type) присутствует. Многопоточность.

Я могу организовать обновление/ добавление строки отдельными транзакциями, с блокировкой записи и т.д., но может в hibernate это уже реализовано( к примеру, merge)?

Answer 1

Да в JPA и HIBERNATE есть метод merge, в который передается неперсистный entity. Метод обращается в БД для поиска данного объекта. Если объект в БД уже есть, то метод возвращает персистный entity, который учитывает состяние в БД и новое (которое было передано в метод). Если объекта в БД нет, то метод возвращает новый персистный entity на основе состояния, которое было передано в метод. В этом смысле проблема автоматизации решена. Однако проблема синхронизации на уровне транзакций не решена. Например, в первой транзакции метод покажет, что объекта еще нет, но транзакцию применит через час, а тем временем вторая сессия добавит объект в БД. Возможно, использование кэша второго уровня позволит решить вопрос синхронизации двух сессий.

READ ALSO
Сравнить две даты без учета времени

Сравнить две даты без учета времени

У меня есть дата в timestamp форматеКаким образом можно проверить равна ли она текущей дате без учета времени? Например 1502010000 она равна 6

399
Разбиение Stream<String>

Разбиение Stream<String>

Есть Stream<String>, как разбить его на несколько Stream или List, относительно тех строк, которые начинаются с определенного слова (аналогично split("word")...

355
Что означает включение и выключение autocommit в Hibernate?

Что означает включение и выключение autocommit в Hibernate?

В чем разница в поведении в случаях если я устанавливаю hibernateconnection

280
Как сделать, чтобы после выбора пункта из Spinner появлялся новый Spinner (которого изначально не было)

Как сделать, чтобы после выбора пункта из Spinner появлялся новый Spinner (которого изначально не было)

Например: в первом списке мы выбираем страну, появляется новый (ниже первого), там выбираем город, появляется новый и тд пока не дойдем до конечного...

325