我有兩個實體:如何在Spring Data中進行「按聚合函數排序」?
的resourcefile:
@Entity
@Table(name = "resource_file")
public class ResourceFile extends IdEntity<Integer> {
@Id
@SequenceGenerator(name = "resource_file_id_generator", sequenceName = "resource_file_id", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "resource_file_id_generator")
@Column(name = "id", unique = true, nullable = false)
@Nonnegative
private Integer id;
...
}
FavoriteResourceFile:
@Entity
@Table(name = "favorite_resource_file")
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class FavoriteResourceFile extends IdEntity<FavoriteResourceFileId> {
@EmbeddedId
private FavoriteResourceFileId id;
@MapsId("resourceFileId")
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "resource_file_id", nullable = false)
private ResourceFile resourceFile;
...
}
我想使下面的查詢「選擇所有的資源文件,並通過最喜歡的資源文件的數量進行排序」。
在SQL它看起來像:
select rf.id, count(frf.resource_file_id) from resource_file rf
left join favorite_resource_file frf on frf.resource_file_id = rf.id
group by rf.id
order by count(rf.id) desc;
但我不知道如何與Spring數據,以及如何做到這一點,使映射到實體的resourcefile在最後。
一些限制:
- 我不能讓有關FavoriteResourceFile中的resourcefile, 因爲它們位於不同的模塊
- 我不想使用本地SQL或JPA查詢(如字符串)。
- 最好使用元模型,規範或QueryDSL,因爲它們已經在項目中使用。
有人可以幫我嗎?