Spring 具有 select 不同的数据 JPA 投影
Spring Data JPA Projection with select distinct
我有一个数据库 table,其中包含文档的元数据。我现在的任务是获取包含文档类型的列表。文档类型在数据库 table 中不是唯一的,但我当然希望它们出现在我的列表中。 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();
现在我得到了组名,但当然它们现在不是唯一的了。所以它没有解决我的问题。
有什么方法可以接收具有唯一组名的有序列表吗?
你太聪明了。相反,只需编写正确的查找方法和 return GroupnameAndOrder
。 Spring Data JPA 将仅检索投影所需的内容。
像这样的东西应该可以解决问题。
List<GroupnameAndOrder> findDistinctByOrderByGroupDisplayorder();
我有一个数据库 table,其中包含文档的元数据。我现在的任务是获取包含文档类型的列表。文档类型在数据库 table 中不是唯一的,但我当然希望它们出现在我的列表中。 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();
现在我得到了组名,但当然它们现在不是唯一的了。所以它没有解决我的问题。
有什么方法可以接收具有唯一组名的有序列表吗?
你太聪明了。相反,只需编写正确的查找方法和 return GroupnameAndOrder
。 Spring Data JPA 将仅检索投影所需的内容。
像这样的东西应该可以解决问题。
List<GroupnameAndOrder> findDistinctByOrderByGroupDisplayorder();