gpt4 book ai didi

具有不同选择的 Spring Data JPA 投影

转载 作者:行者123 更新时间:2023-12-05 02:14:07 26 4
gpt4 key购买 nike

我有一个数据库表,其中包含文档的元数据。我现在的任务是获取包含文档类型的列表。文档类型在数据库表中不是唯一的,但我当然希望它们在我的列表中。 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();

现在我得到了组名,但当然它们现在不是唯一的了。所以它不能解决我的问题。

有什么方法可以接收具有唯一组名的有序列表吗?

最佳答案

你太聪明了。相反,只需编写正确的查找方法并返回 GroupnameAndOrder。然后 Spring Data JPA 将只检索投影所需的内容。

像这样的东西应该可以解决问题。

List<GroupnameAndOrder> findDistinctByOrderByGroupDisplayorder();

关于具有不同选择的 Spring Data JPA 投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54106246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com