gpt4 book ai didi

filtering - 合并3个表并按最后一个搜索

转载 作者:行者123 更新时间:2023-12-02 10:21:24 25 4
gpt4 key购买 nike

我有一个 Property 实体,它具有 City 实体的 ID。具有州实体 ID 的城市实体。以及具有国家/地区实体 ID 的州实体。

我需要找到一个国家/地区的所有属性(property)。

我的解决方案是这样的:

protected Specification<Property> createSpecification(PropertyCriteria criteria) {
...
if (criteria.getCountryId() != null) {
StateCriteria stateCriteria = new StateCriteria();
stateCriteria.setCountryId(criteria.getCountryId());
List<StateDTO> states = stateQueryService.findByCriteria(stateCriteria);
List<Long> statesIds = states.stream().map(StateDTO::getId).collect(Collectors.toList());

LongFilter statesInCountry = new LongFilter();
statesInCountry.setIn(statesIds);

CityCriteria cityCriteria = new CityCriteria();
cityCriteria.setStateId(statesInCountry);
List<CityDTO> cities = cityQueryService.findByCriteria(cityCriteria);
List<Long> citiesId = cities.stream().map(CityDTO::getId).collect(Collectors.toList());

LongFilter citiesInState = new LongFilter();
citiesInState.setIn(citiesId);

specification = specification.and(buildSpecification(citiesInState,
root -> root.join(Property_.city, JoinType.LEFT).get(City_.id)));
}
...
}

使用buildSpecification()有更好的解决方案吗?由于类型参数化,我发现很难理解 QueryService 的继承函数实际执行的操作。

提前致谢!

最佳答案

要获取国家/地区中的所有属性(property),您应该加入实体并将过滤器应用于国家/地区 ID。

protected Specification<Property> createSpecification(PropertyCriteria criteria) {
...
if (criteria.getCountryId() != null) {
specification = specification.and(buildSpecification(criteria.getCountryId(),
root -> root.join(Property_.city, JoinType.LEFT)
.join(City_.state, JoinType.LEFT)
.join(State_.country, JoinType.LEFT)
.get(Country_.id)));
}
...
}

看看这是否满足您的需要。

关于filtering - 合并3个表并按最后一个搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59985628/

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