В моей службе есть два метода: persistLatitude и findLatitude.
@Service
@Transactional
public myservice1{
void persistLatitude (Long Latitude){
//some code
}
Long findLatitude (){
//some code
}
Допустим, я сохраняю широту 29° 52' северной широты в моей таблице БД, но метод persistLatitude
продолжает работать для некоторых других задач. Насколько я понимаю, из-за аннотации транзакций мои изменения будут зафиксированы в БД только после завершения выполнения всего этого метода.
Пока это происходит, оставшаяся конечная точка получает запрос на поиск широты 29° 52' северной широты из таблицы БД. Поскольку транзакция не была совершена из-за незавершенности метода, findLatitude
не сможет найти 29° 52' северной широты в таблице.
Могу ли я что-нибудь сделать, чтобы позволить findLatitude
получить эту широту, когда транзакция, которая создаст это значение, не будет полностью завершена?
Функция, о которой вы просите, называется «чтение уровня изоляции без фиксации». Вы можете применить его для класса или метода:
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
Long findLatitude (){
//some code
}
Эта функция не поддерживается Postgres и Oracle. В основном из-за побочных эффектов, таких как фантомное или неповторяющееся чтение.