【发布时间】:2016-01-03 10:11:50
【问题描述】:
在我的 java 项目中,我需要做一个 HQL 查询
这是我的 HQL 查询:
select count(distinct n.id)" +
" FROM Neighborhood n, NeighborhoodMeta meta, NeighborhoodAffordability aff, AirbnbProperty as ap" +
" WHERE n.id = meta.id AND n.id = aff.id AND n.id = ap.neighborhood AND aff.singleHomeValue!=null" +
" AND (latitude >=:minLat AND latitude <=:maxLat)" +
" AND (longitude >=:minLong " + (meridian180WithinDistance ? "OR" : "AND") + " longitude <=:maxLong) AND " +
"acos(sin(:locationLatitude) * sin(radians(latitude)) + cos(:locationLatitude) * cos(radians(latitude)) * cos(radians(longitude) -:locationLongitude)) <=:R " +
"GROUP BY ap.neighborhood having count(ap.id) > 19
这个计数总是产生一个“1”的结果,但是,如果我删除了查询的最后一行,它会返回一个正确的结果,但是我需要根据上面的条件限制我的结果。
有人可以帮忙吗?
【问题讨论】:
-
首先你应该明白,如果 4 个实体是链接的,那么你必须使用内连接,目前你正在使用叉积,这可能会降低你的性能。第二次尝试指定 latitude , longitude 属性来自哪个实体,如果它们来自 AirbnbProperty 然后 ap.latitude >=:minLat