Order by count using Spring Data JpaRepository

后端 未结 3 899
花落未央
花落未央 2020-12-05 15:51

I am using Spring Data JpaRepository and I find it extremely easy to use. I actually need all those features - paging, sorting, filtering. Unfortunately there is one little

3条回答
  •  暖寄归人
    2020-12-05 16:25

    One option, which is much simpler than the original solution and which also has additional benefits, is to create a database view of aggregate data and link your Entity to this by means of a @SecondaryTable or @OneToOne.

    For example:

    create view a_summary_view as
    select
       a_id as id, 
       count(*) as b_count, 
       sum(value) as b_total, 
       max(some_date) as last_b_date 
    from b 
    

    Using @SecondaryTable

    @Entity
    @Table
    @SecondaryTable(name = "a_summary_view", 
           pkJoinColumns = {@PrimaryKeyJoinColumn(name = "id", referencedColumnName= "id")})
    public class A{
    
       @Column(table = "a_summary_view")
       private Integer bCount;
    
       @Column(table = "a_summary_view")
       private BigDecimal bTotal;
    
       @Column(table = "a_summary_view")
       private Date lastBDate;
    }
    

    You can now then sort, filer, query etc purely with reference to entity A.

    As an additional advantage you have within your domain model data that may be expensive to compute in-memory e.g. the total value of all orders for a customer without having to load all orders or revert to a separate query.

提交回复
热议问题