Я знаю, что save () вставит мой объект, если его еще нет в БД, и пойдет на обновление, если он уже существует (объект, идентифицированный с использованием поля первичного ключа).
Я попробовал код следующим образом
public void update() throws UpdateFailedException{
boolean b= findByPK(); // checking if the entry is already present.
if(b){
repo.save(object); // saving it, internally it will be updating.
}else{
throw new UpdateFailedException("Object not present to update");
}
}
Приведенный выше код не будет соответствовать моим требованиям эффективности, так как он несколько раз опрашивает мою БД, и, кроме того, я не могу гарантировать последовательность в его поведении, поскольку его не происходит вта же граница транзакции. (т.е. даже если я получаю, что запись уже существует в БД, существует возможность удаления моей записи из внешней границы перед вызовом сохранения, и в результате мое сохранение сделает вставку, которую я хочупредотвратить)
Каким будет эффективный способ сделать это?Мне также нужно управлять транзакцией для данных пружины JPA.
или Есть ли способ узнать, выполняет ли save()
вставку или нет ?(чтобы я мог предотвратить вызов save()
, если он собирается сделать вставку)