Ich habe zwei Entitäten:Wie man in Spring Data "nach Aggregatfunktion sortieren"?
Resource:
@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;
...
}
Und ich möchte alle Ressourcendateien die folgende Abfrage „auswählen und gräflichen von Lieblingsressourcendatei sortieren machen ".
In SQL es aussieht:
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;
Aber ich kann nicht verstehen, wie es mit Spring Data zu tun und wie Abbildung auf Resource Einheit am Ende zu machen.
einige Einschränkungen:
- ich nicht Bezug auf FavoriteResourceFile in Resource machen können, , weil sie in verschiedenen Modulen
- befinden Ich möchte nicht nativen SQL oder JPA-Abfrage verwenden (als Strings).
- Es ist vorzuziehen, Meta-Modelle, Specification oder QueryDSL zu verwenden, da sie bereits im Projekt verwendet werden.
Kann mir jemand helfen?