Java 如何将HQL子句(WHERE COUNT()<;MAX_VAL)添加到复杂查询中

Java 如何将HQL子句(WHERE COUNT()<;MAX_VAL)添加到复杂查询中,java,hibernate,jpa,count,hql,Java,Hibernate,Jpa,Count,Hql,现在,我的查询返回航班地图及其票数。 我的目标是从查询结果(count(t)

现在,我的查询返回航班地图及其票数。 我的目标是从查询结果
(count(t)
中排除所有航班。但我无法创建这样的查询。所以现在我必须在方法中排除完整航班,这很令人沮丧,因为我认为应该有办法在查询中做到这一点。有人能帮助建立查询吗?p、 我现在可以使用标准API

String queryString = "SELECT f, COUNT(t)"
            + " FROM Flight f"
            + " JOIN FETCH f.tickets AS t"
            + " WHERE f.departureAirport=:departureAirport"
            + " GROUP BY t.flight"
            + " ORDER BY f.id ASC";

Query query = em.createQuery(queryString);
query.setParameter("departureAirport", departureAirport);

Map<Flight, Long>) flightsTicketCountMap =
            query.getResultList().stream()
            .collect(Collectors.toMap(resultElement -> (Flight) (((Object[]) resultElement)[0]),
                    resultElement -> (Long) (((Object[]) resultElement)[1])));

//below i exclude full flights from map, but i want to do it in query
Map<Flight, Long> availableFlightTicketPriceMap = new HashMap();
for (Map.Entry<Flight, Long> entry : flightsTicketCountMap.entrySet()) {
        flight = entry.getKey();
        ticketsQuantity = entry.getValue();
        if (flight.getAircraft().getModel().getPassengersSeatsQuantity() > ticketsQuantity) {
            availableFlightTicketPriceMap.put(flight, calculateTicketPrice(tariffsDetails, flight, ticketsQuantity));
        }
    }

您是否尝试添加
HAVING
子句

SELECT f, COUNT(t)
FROM Flight f
JOIN FETCH f.tickets AS t
WHERE f.departureAirport=:departureAirport
GROUP BY t.flight
HAVING COUNT(t) < f.aircraft.model.passengersSeatsQuantity
ORDER BY f.id ASC
选择f,计数(t)
f航班
加入获取f.tickets作为t
其中f.departureAirport=:departureAirport
按t航班分组
数量(t)
我刚刚尝试并获得了com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:having子句中的未知列“aircraftmo4.passenger\u seats\u quantity”,但飞机和型号都有急切的抓取策略,因此无法添加JOIN f.aircraft JOIN f.aircraft.model,这也没有帮助(相同的例外)。嗯,奇怪的行为我很确定你想要的就是拥有。您可能需要整理您自己的HQL,而且您很可能在我整理之前就这样做了,因为您面前有模式/实体。好的,谢谢!我会继续努力让它工作。刚刚用其他信息更新了我的问题
SELECT f, COUNT(t)
FROM Flight f
JOIN FETCH f.tickets AS t
WHERE f.departureAirport=:departureAirport
GROUP BY t.flight
HAVING COUNT(t) < f.aircraft.model.passengersSeatsQuantity
ORDER BY f.id ASC