查询和加入很困难

时间:2014-11-11 23:46:08

标签: hibernate jpa spring-data querydsl

我有实体Lots女巫有city_executioncity_execution(独家或)。

如果city_executionnull,则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

现在我希望jpaquerydslregion中的查询无关紧要:

如果用户在搜索表单中输入lots作为参数,即使用户指定citiesregion的{​​{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}}

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