Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Performance 多级数据集的Hibernate性能问题_Performance_Hibernate - Fatal编程技术网

Performance 多级数据集的Hibernate性能问题

Performance 多级数据集的Hibernate性能问题,performance,hibernate,Performance,Hibernate,我有以下一组数据: Class- |- Section | |- Student1 | | |-Day1Details | | |-Day2Details | |- Student2 | | |-Day1Details | | |-Day2Detai

我有以下一组数据:

Class-
      |- Section
      |         |- Student1
      |         |         |-Day1Details
      |         |         |-Day2Details   
      |         |- Student2
      |         |         |-Day1Details
      |         |         |-Day2Details  
      |- Section
                :
                :
我正在使用Hibernate ORM将上述示例数据持久化到数据库中。当我们试图检索这些数据时,hibernate分别为每个学生执行查询。因此,如果有1000名学生,它将触发1000个查询以获取整个数据集,并且由于对数据库的大量i/o操作,这将影响应用程序的性能

我希望在以下几个查询中收集这些数据

select class,section, students from c,s,stu where student.sec=s.sec and s.class = c.class

select day_details from day_details_tab where student in (studentId from above query).

有人能帮我做到这一点吗

中描述了HQL中联接和关联的用法。一次加载所有内容的正确查询是:

 select clazz from Clazz clazz
 left join fetch clazz.sections section
 left join fetch section.students student
 left join fetch student.dayDetails

HQL使用实体和关联。不要像您在问题中所做的那样使用表名和列名。

奇怪的是,它只在day details级别执行单独的查询。其余的数据通过连接获取…如果数据量很大,同时在数据库端连接所有数据也可能会影响DB server的性能…我想在两个不同的查询中运行它。因此,您认为使用两个查询加载相同的数据比仅使用一个查询对性能的影响小吗?没什么意义。不管怎样,你是在预优化,这是所有邪恶的根源。只有当您有经验证的性能问题,并且能够证明问题来自查询时,才进行优化。无论如何,我已经向您展示了如何编写第一个查询。写第二个应该很容易。