Я использую транзакционный метод, используя аннотацию @Transactional
.Я пытаюсь сохранить объект в базе данных с помощью метода save () JpaRepository.(что приведет к ошибке из-за ограничений на отношение к базе данных.)
Теперь, когда я отлаживал программу, я обнаружил, что исключение выдается в конце транзакционного метода, а не при вызове save
метода,Это совершенно отличное поведение от нетранзакционного метода.
Может кто-нибудь объяснить, почему это так?Почему исключение выдается в конце транзакционного метода, а не когда оно действительно должно произойти.
Мой второй вопрос: когда метод транзакционный, генерируется исключение DataViolationException
, а когда нетранзакционный, исключениевыброшено PSQLException
(используется база данных Postgres).Почему это так?
Ниже приведен код
@Transactional
public ResponseType methodA(UserObject userObject) {
//save call
jpaRepoObject.save(userObject);
//next call will fail due to relational constraints on database
jpaRepoObject.save(userObject); //should throw PSQLException/DataViolationException
return new ResponseType("success"); //Error thrown after this line.
}