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

时间:2015-09-15 11:58:21

标签: 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>

学生:

@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);
}

1 个答案:

答案 0 :(得分:0)

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