我有实体Lots
女巫有city_execution
或city_execution
(独家或)。
如果city_execution
为null
,则region_execution
不是region_execution
,而Lots ( #id_lot , ... , *city_execution* , *region_execution* )
则相同。
一个地区也有很多城市。
这是我的表:
city_execution
id_city
FK引用region_execution
id_region
FK参考cities ( #id_city, ... , *id_region* )
regions ( #id_region , ... )
hibernate
现在我希望jpa
或querydsl
或region
中的查询无关紧要:
如果用户在搜索表单中输入lots
作为参数,即使用户指定cities
中region
的{{1}},我也可以获得所有select lot from lot
left join fetch on lot.city_execution as city
left join fetch on lot.region_execution as region
where city.id_region = ?
我试试这个,但我一无所获:
querydsl
我正在使用 JPAQuery query = new JPAQuery(entityManager).from(lot)
.leftJoin( lot.regions ).fetch()
.leftJoin( lot.cities).fetch()
.where(lot.city_execution.region.id_region.eq(region_value_enter_by_user))
.distinct();
所以它可以像这样写:
{{1}}
答案 0 :(得分:0)
这是一个querydsl
问题,因为它会为我的查询生成额外的join cross
。
所以我们通过改变
解决了这个问题 JPAQuery query = new JPAQuery(entityManager).from(lot)
.leftJoin( lot.regions ).fetch()
.leftJoin( lot.cities).fetch()
.where(lot.city_execution.region.id_region.eq(region_value_enter_by_user))
.distinct();
到
JPAQuery query = new JPAQuery(entityManager).from(lot)
.leftJoin( lot.regions ).fetch()
.leftJoin( lot.cities , city).fetch()
.where(city.region.id_region.eq(region_value_enter_by_user))
.distinct();
在city
.leftJoin( lot.cities , city).fetch()
lot.city_execution
并将city
更改为where