我想按值排序映射。例如,我有人類,它具有地圖詳細信息,它們存儲在鍵值爲Map<String, String>
的地圖中。彈簧數據按給定鍵內的映射值排序
我使用hibernate5的springboot。這是映射。
public class Person implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@DocumentId
@Column(name = "personid")
private Integer id;
@Column(name = "name")
private String name;
// this is a collection of person details
@ElementCollection()
@MapKeyColumn(name = "detailkey")
@Column(name = "detailvalue")
@CollectionTable(name = "details", joinColumns = @JoinColumn(name = "personid"))
Map<String, String> details = new HashMap<>();
//getter and setters omitted
到目前爲止,我能夠檢索到具有某些特定的詳細信息和關鍵特定細節值的人。因此,例如在一個數據庫中的人表有眼睛顏色的詳細屬性和值可以有「綠色」,「藍色」,「棕色」。請注意,這不是一個真實的例子,只是爲了清晰起見。
因此,舉例來說,我可以得到人的名單,並通過他們的名字排序,在控制器我可以做
Sort sort = new Sort(Sort.Direction.ASC, "name");
和相反方向
Sort sort = new Sort(Sort.Direction.DESC, "name");
Pageable pageable = new PageRequest(1, 10, sort);
pageResult = personRepository.findAll(
"eyecolor", "green", pageable
);
而這一次將返回「eyecolor」爲綠色的人員列表。到目前爲止這麼好,這是按預期工作。現在我想定義一個關於detailvalue的排序。
例如,我想獲得按照他們的眼睛顏色排序的人員列表。因此,首先我應該有「藍色」,「棕色」,「綠色」的人。
如何在這種情況下指定Sort?
在標準的SQL它會是這樣的:
SELECT P *從人p LEFT JOIN細節d在 p.personid = d.personid AND p.detailkey = 'eyercolor' ORDER BY p .detailvalue ASC;