Я перефразирую ваш вопрос, чтобы убедиться, что я правильно понял:
Вы начинаете с сущности e1
с пустого первичного ключа.Сущность имеет среди других свойств два свойства (A, B)
.
Если уже существует существующая сущность с такими же значениями (A, B)
, которую вы хотите обновить.В противном случае вы хотите вставить строку, соответствующую вашей сущности e1
.
Стандартный способ JPA сделать это будет:
- запрос с использованием
(A, B)
. - Если вы получаете объект обратно, захватите идентификатор, установите его на
e1
.Сохранить e1
. - Если вы не получите обратно объект, сохраните
e1
как есть.
Это, конечно, именно тот запрос, который вы хотите избежать,
Кроме того, вы можете сделать оператор обновления, используя аннотацию @Query
, и проверить количество обновлений.Если он равен 0, просто сохраните e1
как новый объект.
Для этого вам нужно указать все поля, которые вы хотите обновить, и он не работает с каскадом, то есть с атрибутами, которые являются объектамисами по себе.