Я пытаюсь заполнить свою базу данных, и во время этого я создаю ассоциации между сотрудниками и командами. Я пытаюсь получить доступ к членам команды в команде через спящий режим ссылки OneToMany и выполняю ленивую загрузку. Это прекрасно работает в моем приложении, кроме случаев, когда я вызываю его сразу после создания сущностей.
Я вполне уверен, что это проблема транзакции или кэширования в спящем режиме, поскольку все строки существуют в базе данных, но Я изо всех сил пытаюсь понять, в чем проблема. Я попытался преобразовать все сохранения в функции populateTeamsAndEmployees
в saveAndFlu sh, но это не помогло.
Как заставить team.getTeamMembers () работать каждый раз, когда она вызывается ?
Примечание: это происходит только тогда, когда я вызываю функцию seedData()
через RequestMapping
, но не происходит, когда я вызываю seedData()
с аннотацией @Scheduled
Функция с проблемой
void seedData() {
populateTeamsAndEmployees()
otherBusinessLogic()
}
public void otherBusinessLogic() {
List<Team> teams = teamRepository.findAll();
teams.foreach(team -> {
/*
works great every time, returns all team members
*/
List<Employee> teamMembers = employeeRepository.findEmployeeByTeamId(team.getId());
/*
this returns null when ran immediately after populateTeamsAndEmployees(),
but returns the same as the line above all other times
*/
List<Employee> thisDoesntWork = team.getTeamMembers();
});
}
public void populateTeamsAndEmployees() {
List<EmployeeFromOtherSystem> employeesToConvert = otherSystemRepo.findAll();
employeesToConvert.foreach(otherSysEmployee -> {
employeeRepository.save(otherSysEmployee.toEmployee());
});
}
Объекты:
class Team {
@OneToMany(mappedBy = "team", fetch = FetchType.LAZY)
private List<Employee> teamMembers;
}
class Employee {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TEAM_ID")
private Team team;
}