Добрый день Есть сущность Example с полями: id, name, type, values..
Требуется найти строчку по ключу name, type и обновить значения values. Если такой строчки не обнаружено, то вставить новую. Констрейн (name, type) присутствует. Многопоточность.
Я могу организовать обновление/ добавление строки отдельными транзакциями, с блокировкой записи и т.д., но может в hibernate это уже реализовано( к примеру, merge)?
Да в JPA и HIBERNATE есть метод merge, в который передается неперсистный entity. Метод обращается в БД для поиска данного объекта. Если объект в БД уже есть, то метод возвращает персистный entity, который учитывает состяние в БД и новое (которое было передано в метод). Если объекта в БД нет, то метод возвращает новый персистный entity на основе состояния, которое было передано в метод. В этом смысле проблема автоматизации решена. Однако проблема синхронизации на уровне транзакций не решена. Например, в первой транзакции метод покажет, что объекта еще нет, но транзакцию применит через час, а тем временем вторая сессия добавит объект в БД. Возможно, использование кэша второго уровня позволит решить вопрос синхронизации двух сессий.
Продвижение своими сайтами как стратегия роста и независимости