FetchType.LAZY不适用于Spring数据jpa中的@manyToMany

Bab*_*bun 6 java hibernate

我有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>
Run Code Online (Sandbox Code Playgroud)

学生:

@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>
Run Code Online (Sandbox Code Playgroud)

学科:

@ManyToMany(mappedBy="subjects")
    private List<Student> students;
Run Code Online (Sandbox Code Playgroud)

现在,我想让一个特定的大学的学生.但不是相关的科目.所以,我正在调用存储库如下:

University u=UniversityRepo.findByUnivId("1234");
u.getStudents(); 
Run Code Online (Sandbox Code Playgroud)

但是,这让我回到了学生名单以及来自主题的相关科目.似乎在我调用u.getStudents()时,它不仅取得学生,还取得科目,虽然FetchType是LAZY.
请建议.

编辑: UniversityRepo

public interface UniversityRepo extends JpaRepository<University, BigInteger> {

    public University findByUnivId(String id);
}
Run Code Online (Sandbox Code Playgroud)

dar*_*eja 0

您可能正在使用 springboot 的默认 LocalEntityManagerFactory ,它与 spring-orm 包中的 spring 数据一起提供。此 FactoryBean 的配置能力有限,建议用于仅使用 JPA 进行数据访问的独立应用程序。如果您想要为外部数据源和/或跨多个资源的全局事务设置持久性提供程序,请考虑使用 LocalContainerEntityManagerFactoryBean,或者将其部署到完整的 Java EE 应用程序服务器并通过 JNDI 访问部署的 EntityManagerFactory。这里我留下了两个重要的链接以获得更好的文档:Spring JPALocalContainerEntityManagerFactoryBean