我有一个@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会话何时创建和销毁
1条答案
按热度按时间wi3ka0sx1#
是的,这是因为数据已经在持久性上下文中了。如果你移除
@Transactional
您应该看到执行了两个查询,因为这样就不会共享持久性上下文(除非您在spring中启用了open session in view)。