我有一个数据库表,用于存储文档元数据。我的任务是获取一个文档类型列表。虽然在数据库表中文档类型不是唯一的,但我希望它们在我的列表中是唯一的。这个SQL非常简单:
SELECT DISTINCT groupname, group_displayorder
FROM t_doc_metadata
ORDER BY group_displayorder;
我学到了可以使用投影从实体 DocMetadata 中获取字段的子集。我通过以下方式解决了这个问题。我的实体:
@Entity
@Table(name="T_DOC_METADATA")
@Data
public class DocMetadata {
..............
@Column(nullable=false)
private String displayname;
@Column(nullable=false)
private Integer displayorder;
@Column(nullable=false)
private String groupname;
@Column(name="GROUP_DISPLAYORDER",
nullable=false)
private Integer groupDisplayorder;
@Column(name="METADATA_CHANGED_TS",
nullable=false,
columnDefinition="char")
private String metadataChangedTimestamp;
..........
}
我的投影接口:
public interface GroupnameAndOrder {
String getGroupname();
Integer getGroupDisplayorder();
void setGroupname(String name);
void setGroupDisplayorder(int order);
}
现在,我认为我可以通过将以下内容添加到我的存储库中来变得非常聪明:
@Query("select distinct d.groupname, d.groupDisplayorder from DocMetadata d order by d.groupDisplayorder")
public List<GroupnameAndOrder> findSortedGroupnames();
很遗憾,当迭代结果列表并调用getGroupname()时,结果为空。
因此,我根据文档更改了存储库中的行:
public List<GroupnameAndOrder> findBy();
现在我已经得到了组名,但是它们不是唯一的。所以这并没有解决我的问题。
有没有办法获得一个按顺序排列且唯一的组名列表?