Spring Hibernate@OneToMany在第一次调用时返回null

Spring Hibernate@OneToMany在第一次调用时返回null,spring,hibernate,jpa,spring-data-jpa,Spring,Hibernate,Jpa,Spring Data Jpa,我试图填充我的数据库,在此期间,我创建了员工和团队之间的关联。我试图通过hibernate OneToMany引用访问团队中的团队成员,并进行延迟加载。这在我的应用程序中非常有效,除非我在实体创建后立即调用它 我相当肯定这是一个hibernate事务或缓存问题,因为数据库中存在所有行,但我很难理解问题是什么。我已尝试将populateteam和employees函数中的所有保存转换为saveAndFlush,但没有效果 如何使team.getTeamMembers()在每次调用时都工作? 注意:

我试图填充我的数据库,在此期间,我创建了员工和团队之间的关联。我试图通过hibernate OneToMany引用访问团队中的团队成员,并进行延迟加载。这在我的应用程序中非常有效,除非我在实体创建后立即调用它

我相当肯定这是一个hibernate事务或缓存问题,因为数据库中存在所有行,但我很难理解问题是什么。我已尝试将
populateteam和employees
函数中的所有保存转换为saveAndFlush,但没有效果

如何使team.getTeamMembers()在每次调用时都工作?

注意:这仅在我通过
RequestMapping
调用
seedData()
函数时发生,但在我使用
@Scheduled
注释调用
seedData()
时不会发生


有问题的函数
void seedData(){
人口团队和员工()
otherBusinessLogic()
}
公共业务逻辑(){
List teams=teamRepository.findAll();
团队。foreach(团队->{
/*
每次都很好,回报所有团队成员
*/
List teamMembers=employeeRepository.findeemployeebyteamid(team.getId());
/*
在populateTeamsAndEmployees()之后立即运行时,返回null,
但在所有其他时间返回与上面的行相同的值
*/
列出ThisDoesNetwork=team.getTeamMembers();
});
}
公共无效人口团队和员工(){
List employeesToConvert=otherSystemRepo.findAll();
employeesToConvert.foreach(其他系统雇员->{
employeeRepository.save(otherSysEmployee.toEmployee());
});
}
实体:
班级团队{
@OneToMany(mappedBy=“team”,fetch=FetchType.LAZY)
私人名单小组成员;
}
班级员工{
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“团队ID”)
私人团队;
}

所以问题是JPA在我创建实体之后就缓存了它

通过调用
em.clear()

有关如何使用JPA存储访问EntityManager的信息,请参见下文:

请参阅下文了解为什么要使用
.clear()


由于您已将
FetchType
声明为Lazy,因此在简单查询期间不会从数据库中检索相关子项。-您可以将其更改为
@OneToMany(mappedBy=“team”,fetch=FetchType.EAGER)
-但是,如果您的实体关系过于复杂或“获取”调用次数过多,则可能会出现性能问题。我已尝试将
FetchType
更改为eager,但仍然无法解决此问题。您是否也在
Employee
一侧对其进行了调整?(只是检查一下,以防万一)是的,我把两者都改成了
FetchType.Eager
。我假设这与在数据库中创建数据后立即调用它有关,因为
team.getTeamMembers()
在其他任何时候都能正常工作。如果是这种情况,您可能必须先提交,然后再获取它们(虽然我不确定,但我承认我没有仔细查看代码)
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;
}