Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
具有一对多关系的分页(Hibernate/Spring/Oracle)_Oracle_Spring_Hibernate_One To Many - Fatal编程技术网

具有一对多关系的分页(Hibernate/Spring/Oracle)

具有一对多关系的分页(Hibernate/Spring/Oracle),oracle,spring,hibernate,one-to-many,Oracle,Spring,Hibernate,One To Many,对于具有一对多关系的对象列表,我需要实现一致且高效的分页。列表中的项目按组显示,组成员的数量因组而异。某些组可能不包含任何成员。分页应该由组成员的数量决定 例如,考虑一个家庭照片目录。规则如下: 每个族单元在页面上被分组为一组 同一页面上可以显示任意数量的族 每页大约有10张照片 整个家庭必须出现在同一页上。如果页面上的最后一个系列将超出10张图片的限制,请将该系列保留在此页面上或在下一页上显示,并始终执行此操作 如果没有家庭成员的照片,则家庭分组将不显示任何照片。由于没有图片,此组将不计入10

对于具有一对多关系的对象列表,我需要实现一致且高效的分页。列表中的项目按组显示,组成员的数量因组而异。某些组可能不包含任何成员。分页应该由组成员的数量决定

例如,考虑一个家庭照片目录。规则如下:

  • 每个族单元在页面上被分组为一组
  • 同一页面上可以显示任意数量的族
  • 每页大约有10张照片
  • 整个家庭必须出现在同一页上。如果页面上的最后一个系列将超出10张图片的限制,请将该系列保留在此页面上或在下一页上显示,并始终执行此操作
  • 如果没有家庭成员的照片,则家庭分组将不显示任何照片。由于没有图片,此组将不计入10张图片的限制
  • 有可能有一个家庭有10张以上的照片,这个案件应该得到处理

  • 请分享开发此算法的任何技巧。我将非常感谢任何特定于平台的提示。该应用程序使用Hibernate 3.3.2和Spring 2.5.6。数据库是Oracle 10g。

    在Hibernate中,您可以限制查询返回的行数,即。E设置页面大小,使用

    Query.setMaxResults(nbr);
    
    如果要加载与第一个页面不同的页面,请将页面的第一行设置为

    query.setFirstResult(rowNr);
    
    两者都只对主表(family)有效,但不限制子表(photos)中的行数。然后你有非常特殊的要求(如果第一个家庭有三张照片,那么第二个家庭只允许在那一页上有七张照片,而不是像往常一样有十张)。为此,我建议您忘记家族中的Hibernate一对多关系,而是手动执行。这使您可以完全控制照片的加载并限制其数量

    • 在family中,不包括照片的hibernate属性
    • 相反,您可以在类族中编写一个方法“getPhotos(int nbr_of_photos)”,在该方法中,您可以从照片表(使用会话和查询)手动加载此族的照片。你可以根据需要限制他们的人数。如果方便,可以将结果缓存在族对象中(可选,无需)
    • 在照片中,可以将族的id定义为简单的数字或字符串属性,也可以将多对多属性定义为多对多属性