我有一个数据库表,其中包含文档的元数据。我现在的任务是获取带有文档类型的列表。文档类型在数据库表中不是唯一的,但是我当然希望它们在列表中。 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();
现在我得到了组名,但是现在它们现在已经不唯一了。所以它不能解决我的问题。
有没有办法接收具有唯一组名的有序列表?
答案 0 :(得分:1)
您正试图变得太聪明。相反,只需编写适当的find方法并返回GroupnameAndOrder
。然后,Spring Data JPA将仅检索投影所需的内容。
类似的事情应该可以解决。
List<GroupnameAndOrder> findDistinctByOrderByGroupDisplayorder();