我有实体Market
和Event
。Market
实体有一列:
@ManyToOne(fetch = FetchType.EAGER)
private Event event;
字符串
接下来我有一个repository:
public interface MarketRepository extends PagingAndSortingRepository<Market, Long> {
}
型
一个投影:
@Projection(name="expanded", types={Market.class})
public interface ExpandedMarket {
public String getName();
public Event getEvent();
}
型
使用REST查询/api/markets?projection=expanded&sort=name,asc
,我成功地获得了按市场名称排序的嵌套事件属性的市场列表:
{
"_embedded" : {
"markets" : [ {
"name" : "Match Odds",
"event" : {
"id" : 1,
"name" : "Watford vs Crystal Palace"
},
...
}, {
"name" : "Match Odds",
"event" : {
"id" : 2,
"name" : "Arsenal vs West Brom",
},
...
},
...
}
}
型
但我需要的是获得按事件名称排序的市场列表,我尝试了查询/api/markets?projection=expanded&sort=event.name,asc
,但它不起作用。我应该怎么做才能使它起作用?
6条答案
按热度按时间vulvrdjw1#
基于Spring Data JPA文档属性表达式
.你可以在方法名中使用_来手动定义遍历点.
您可以在REST查询中使用下划线,如下所示:
/API/markets?projection=expanded&sort=event_name,asc
50few1ms2#
只需将
spring.data.rest.webmvc
降级为Hopper
版本即可字符串
感谢@Alan Hay对this question的评论
在Hopper版本中,按嵌套属性排序对我来说很好,但我确实在Ingalls版本的RC版本中遇到了以下bug。Ingalls版本的RC版本中的bug。据报道,这一问题已被修复,
顺便说一句,我尝试了
v3.0.0.M3
,报告说修复了,但不适用于我。vwkv1x7d3#
我们有一个例子,当我们想按链接实体中的字段进行排序时(它是一对一的关系)。最初,我们使用基于https://stackoverflow.com/a/54517551的示例来搜索链接字段。
因此,我们的解决方案是提供自定义的排序和分页参数。下面是示例:
字符串
使用的Sping Boot 版本:2.3.8.RELEASE
我们也有实体的存储库,并使用投影:
型
vsdwdz234#
您的
MarketRepository
可以有一个named query
,如下所示:字符串
您可以使用
@RequestParam
从url获取name
参数ltqd579y5#
这个page有一个可行的想法。这个想法是在仓库顶部使用一个控制器,并单独应用投影。
下面是一段可以工作的代码(SpringBoot 2.2.4)
字符串
mfuanj7w6#
Spring Data REST文档:
不支持按目录关联(即指向顶级资源的链接)排序。
https://docs.spring.io/spring-data/rest/docs/current/reference/html/#paging-and-sorting.sorting
我发现的一个替代方案是使用
@ResResource(exported=false)
。这是无效的(尤其是对于遗留的Spring Data REST项目),因为避免了资源/实体将被加载HTTP链接:字符串
我尝试在annotations的帮助下激活sort by associations,但没有成功,因为我们总是需要覆盖
JacksonMappingAwareSortTranslator.SortTranslator
检测annotation的mappPropertyPath
方法:型
标注
型
在你的项目中,包括**@SortByLinkableAssociation**在搜索什么是排序的关联。
型
真的,我没有找到一个明确的和成功的解决方案,这个问题,但决定公开它,让考虑它,甚至Spring团队考虑包括在nexts版本。