spring数据findbyid与join查询性能

piv4azn7  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(264)

我有一个@onetomany实体之间的关系,比如说班级和学生。现在每个班至少有100名学生。这就是我和学生的关系在班级实体中的定义

@OneToMany(mappedBy = "classDataEntity", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<StudentDataEntity> studentDataEntities;

为了检查通过id(pk)获取类的性能,我们使用了两种方法
可选findbyid(id);//与学生相处Harmony
在repository中创建一个新方法,@query将classid中的两个表连接起来
我们从同一个服务类方法调用这两个方法,例如

@Transactional
public ClassDataEntity fetchClassEntity(Long classId){
    ClassDataEntity classDataEntityJOined  = repo.fetchClassWithStudents(id);
    ClassDataEntity classDataEntity  = repo.findById(id);
}

我的理解是,对于很多学生来说,join应该表现得更好,因为它对db的调用更少,因此网络调用也更少。但在上述情况下,我们看到findbyid的表现要好得多
是不是因为id为的数据已经在会话中?当通过crud存储库调用时,hibernate会话何时创建和销毁

wi3ka0sx

wi3ka0sx1#

是的,这是因为数据已经在持久性上下文中了。如果你移除 @Transactional 您应该看到执行了两个查询,因为这样就不会共享持久性上下文(除非您在spring中启用了open session in view)。

相关问题