Для двух методов чтения и записи в одной и той же службе транзакций считывайте данные до того, как они будут зафиксированы в БД транзакцией методов записи

В моей службе есть два метода: 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 получить эту широту, когда транзакция, которая создаст это значение, не будет полностью завершена?

0
0
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Функция, о которой вы просите, называется «чтение уровня изоляции без фиксации». Вы можете применить его для класса или метода:

@Transactional(isolation = Isolation.READ_UNCOMMITTED)
Long findLatitude (){
    //some code
}

Эта функция не поддерживается Postgres и Oracle. В основном из-за побочных эффектов, таких как фантомное или неповторяющееся чтение.

Другие вопросы по теме