我有3个实体大学,学生和主题。 大学和学生有多对多关系,学生和主题也有多对多的关系。它们的实现如下。 的大学:
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(
name="UNIV_TO_STD_REL"
, joinColumns={
@JoinColumn(name="UNIV_DBKY", referencedColumnName="UNIV_DBKY")
}
, inverseJoinColumns={
@JoinColumn(name="STD_DBKY", referencedColumnName="STD_DBKY")
}
)
private List<Student> students;<br>
学生:
@ManyToMany(mappedBy="students")
private List<University> universities;
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(
name="STD_TO_SUB_REL"
, joinColumns={
@JoinColumn(name="STD_DBKY", referencedColumnName="STD_DBKY")
}
, inverseJoinColumns={
@JoinColumn(name="SUB_DBKY", referencedColumnName="SUB_DBKY")
}
)
private List<Subject> subjects;<br>
主题:
@ManyToMany(mappedBy="subjects")
private List<Student> students;
现在,我想让一个特定的大学的学生。但不是相关的科目。所以,我按照以下方式调用存储库:
University u=UniversityRepo.findByUnivId("1234");
u.getStudents();
但是,这会让我返回学生名单以及来自主题的相关科目。似乎在我打电话给 u.getStudents()时,它不是虽然 FetchType是LAZY ,但只取得学生,也取得了主题 请建议。
修改 UniversityRepo
public interface UniversityRepo extends JpaRepository<University, BigInteger> {
public University findByUnivId(String id);
}
答案 0 :(得分:0)
您可能正在使用springboot的默认LocalEntityManagerFactory,它随spring-orm软件包中的spring数据一起提供。该FactoryBean具有有限的配置功能,推荐用于仅使用JPA进行数据访问的独立应用程序。如果要为外部数据源和/或跨越多个资源的全局事务设置持久性提供程序,请考虑使用LocalContainerEntityManagerFactoryBean,或者将其部署到完整的Java EE应用程序服务器中并通过JNDI访问已部署的EntityManagerFactory。 在这里,我留下了两个重要的链接以获取更好的文档:Spring JPA,LocalContainerEntityManagerFactoryBean