Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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 如何对所选数据进行分组?_Java_Sql_Hibernate_Jpa - Fatal编程技术网

Java 如何对所选数据进行分组?

Java 如何对所选数据进行分组?,java,sql,hibernate,jpa,Java,Sql,Hibernate,Jpa,我有一个comments表,我想从中通过外键profile\u id对注释进行选择和分组 我使用的是JPA2/hibernate,表之间有一对多的关系,从profile到comment 目前,sql查询重新运行注释列表,并通过多对一关系获得每个注释的概要文件 请帮助我回答以下关于查询后和查询前执行排序的问题: 如何根据注释表的配置文件id(外键)或配置文件表的id(主键)对返回的注释列表进行排序 我应该如何构造sql查询以按配置文件对注释进行排序 两种排序方法中的哪一种——前排序还是后排序——是

我有一个
comments
表,我想从中通过外键
profile\u id
对注释进行选择和分组

我使用的是JPA2/hibernate,表之间有一对多的关系,从
profile
comment

目前,sql查询重新运行注释列表,并通过多对一关系获得每个注释的概要文件

请帮助我回答以下关于查询后和查询前执行排序的问题:

  • 如何根据
    注释
    表的
    配置文件id
    (外键)或
    配置文件
    表的
    id
    (主键)对返回的注释列表进行排序
  • 我应该如何构造sql查询以按配置文件对注释进行排序
  • 两种排序方法中的哪一种——前排序还是后排序——是更好的做法

  • 让数据库为您排序:它非常高效

    这方面的HQL非常简单:

    select c from Comment c order by c.profile.id
    
    “排序”(后排序)将由内存中的java完成,而“排序依据”(预排序)将由rdbms完成。在大多数情况下,让rdbms使用SQL来实现这一点更为有效。java排序将由排序对象的compareTo方法控制

    SQL非常简单,只需向HQL添加order by子句,如下所示:

    from Comments order by profile_ID
    
    或者,使用注释,可以在映射中指定如何按以下方式排序:

    @org.hibernate.annotations.OrderBy(
         clause = "profile_id asc"
    )
    
    为了让结果在内存中按java排序,可以将注释集合映射为SortedMap或SortedSet

    @org.hibernate.annotations.Sort(
         type=org.hibernate.annotations.SortType.NATURAL
    )
    private SortedSet<Comment> comments = new TreeSet<Comment>();
    
    @org.hibernate.annotations.Sort(
    type=org.hibernate.annotations.SortType.NATURAL
    )
    private SortedSet comments=new TreeSet();
    
    本例中的“NATURAL”要求Comment类通过使用compareTo方法确保按profile_id对注释进行排序

    如果Comments类实现了CoMPARATOR,您还可以使用SortType.CoMPARATOR进行更多的控制

    参考:使用Hibernate的Java持久性 及