Почему не изменяется состояние обьекта?
class Person {
.....
int digit = 0;
....
}
....
private static String lastPersonId; // Хранит id последнего измененного Person
....
@Transactional
public void changeState(String personId, int digit) {
Person person = personRepository.findById(person.getId()).get();
person.setDigit(digit);
personRepository.save(person);
}
public void doAction(String personId) {
if (digitIsIncorrect(lastPersondId)) {
// движения
}
// движенния
changeState(person.getId());
lastPersonId = personId;
}
public void digitIsIncorrect(String personId) {
int incorrectNum = 10;
Person person = personRepository.findById(personId).get();
return person.getDigit() == incorrectNum;
}
....
junit
.....
public voidTestPerson() {
Person firstPerson = ....;
Person secondPerson = ....;
}
`
Почему-то при проверке digitIsIncorrect digit не всегда имеет обновленное значение. С чем это может быть связано? Заранее благодарю за ответы.
Ответы (2 шт):
Ты не задаешь id,если у тебя в entity на аннотации id нет аннотации например:
@GeneratedValue(strategy = GenerationType.AUTO)
то он просто не может сохранить сущность без id.Добавь в сущность на id эту строки и посмотри, заработает ли.
Или у тебя эта строка :
Person person = personRepository.findById(person.getId()).get();
Просто возвращает null, из-за id как раз.
Возможно просто ошибка в логике обновления поля, убедитесь, что вызываются setDigit и personRepository.save каждый раз, когда вы этого ожидаете, и именно с теми id, которые ожидаете (не перепутаны personId и lastPersondId).
Из того, что имеется:
Приведён код метода changeState(String, int), однако далее вызывается:
changeState(person.getId());
Вызывается другой метод, который не обновляет digit?
Также если действия происходят в разных потоках, то изменения не попадают в базу, например, до завершения транзакции или явного вызова personRepository.flush()