Правильно ответ на часть ответа @AdrianShum.
. Поведение сравнения версий по умолчанию в основном выполняет следующие шаги:
Теперь предположим, что между шагами 1 и 3 объект был изменен другой транзакцией, поэтому его номер версии на этапе 3 не является V1. Затем, когда номер версии отличается, запрос на обновление не будет изменять какой-либо реестр, hibernate поймет это и выбросит исключение.
Вы можете просто протестировать это поведение и убедиться, что исключение выбрано напрямую, изменяя номер версии в вашей базе данных между шагами 1 и 3.
Изменить. Не знаете, какой провайдер постоянства JPA вы используете с Spring Data JPA, но для получения более подробной информации об оптимизации блокировки с JPA + Hibernate я предлагаю вам прочитать главу 10, раздел Управление одновременным доступом , книги Сохранение Java с гибернацией (спящий режим в действии)
Ваша функция входа в систему должна выглядеть следующим образом:
getloginUsers(){
this.restProvider.getUsers(this.userData, 'user_Login').subscribe((data) => {
console.log(data);
if (data) {
this.responseData = data;
console.log(this.responseData.msg.name);
this.user = this.responseData.msg.name;
if (this.responseData.status === 'success') {
this.createUser(this.user);
this.navCtrl.push(MyApp);
}
else{
this.presentAlert();
}
}
});
}
Попробуйте эту функцию как свою учетную запись. И удалите свой this.createUser(this.user)
из вашего constructor
. Внутри вашего app.component.ts
this.events.subscribe('user:created', (data) => { // update from login
console.log(data);
this.email = data.email;
this.userName = data.display_name ;
});