Скажем, у меня есть методы со следующей подписьюпараллелизм (устаревшие данные) проблема в JPA
Object getData(int id) {
//create a entity manager
//get data frm db
//return data
}
updateData() {
Object obj = getData(id)
//get entity manager
//start transcation tx
//update
//commit tx
}
Теперь это будет вызывать проблемы параллелизма? Могут ли данные быть просроченными в худшем случае? Например. если я getData
, и к моменту обновления, если кто-то обновит данные, мои updateData
будут иметь устаревшие данные? Теперь я могу использовать следующее: решит ли я проблему?
Object getData(int id,Entitymanager em) {
//get data frm db using em
//return data
}
updateData() {
Object obj = getData(id)
//get entity manager em
//start transcation tx
//getdata using getData(id,em)
//commit tx
}
Блокировка на уровне строк здесь не поможет: он вытаскивает все данные за пределами транзакции. – GaryF
будет получать данные и обновлять данные внутри одной и той же трансакции, чтобы решить проблему? Plz см. Мое новое редактирование исходного сообщения – akp
Получение данных внутри транзакции будет означать, что при блокировке строк одновременное обновление будет вынуждено ждать по завершении первое обновление. Тем не менее, оба они все равно будут работать, поэтому ваш блок транзакций должен заботиться о том, чтобы он не перезаписывал ничего, сделанное другой транзакцией. – GaryF