Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FetchType.LAZY不适用于Spring数据jpa中的@manyToMany_Java_Hibernate - Fatal编程技术网

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

Java FetchType.LAZY不适用于Spring数据jpa中的@manyToMany,java,hibernate,Java,Hibernate,我有三个实体:大学、学生和学科。大学与学生有多对多的关系,学生与学科也有多对多的关系。它们的实现如下所示。 大学: @ManyToMany(fetch=FetchType.LAZY) @JoinTable( name="UNIV_TO_STD_REL" , joinColumns={ @JoinColumn(name="UNIV_DBKY", referencedColumnName="UNIV_D

我有三个实体:大学、学生和学科。大学与学生有多对多的关系,学生与学科也有多对多的关系。它们的实现如下所示。 大学:

 @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;
但是,这也返回了学生列表以及主题中的相关主题。似乎当我调用u.getStudents()时,它不仅获取学生,还获取主题,尽管获取类型是惰性的。
请建议

编辑: 雷波大学

public interface UniversityRepo extends JpaRepository<University, BigInteger> {

    public University findByUnivId(String id);
}
公共接口大学REPO扩展了JpaRepository{
公立大学findByUnivId(字符串id);
}

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

您能否展示
UniversityRepo.findByUnivId.findByUnivId的实现?请记住,如果您在调试器中检查值,(
Student.getSubjects())
它也会触发延迟加载。因此,请检查控制台(enable Output)上的查询,此时主题确实已加载。我可以在调用u.getStudents()时看到主题已加载。在调试模式下,我可以看到有一个select for University u=UniversityRepo.findByUnivId(“1234”)和下一步中的两个连续select查询,即u.getStudents()。谢谢当然,您会看到它们处于调试模式,因为这会触发加载。。。检查集合后,将立即检索该集合。如果查看学员,调试器将检查字段以使其显示,这反过来会触发加载。@Babun否,因为应该是这样的:如果访问该集合,则加载该集合。要验证调试器是否延迟加载,可以启用查询输出,在“getStudents()”后面设置断点。您现在不应该看到任何关于主题的查询。一旦您开始检查(在调试模式下)主题集合,您就会看到查询被触发。如果是这样的话,懒散的工作是正常的。如果“立即”加载主题,您可能在某个地方有一段代码,在加载学生后访问该主题。
public interface UniversityRepo extends JpaRepository<University, BigInteger> {

    public University findByUnivId(String id);
}