JPQL - Select 超过 10 个不同客户租用的汽车

JPQL - Select cars rented by more than 10 different customers

我有 3 个实体:CarRentalCustomer。 租车与汽车和客户有关。

我需要编写查询来查找 10 多个不同客户租用的汽车

以下代码:

@Override
    public List<CarEntity> findCarsRentedByDifferentCustomers() {

        TypedQuery<CarEntity> query = entityManager.createQuery(
        "SELECT car FROM CarEntity car join car.rentals cr " +
                "WHERE(SELECT COUNT(re) FROM RentalEntity re " +
                "join re.customer c " +
                "GROUP BY c.id) > 10", CarEntity.class
        );

        return query.getResultList();
    }

我总是得到 DataIntegrityViolationExceptionInvalidDataAccessApiUsageException。我已经尝试过以多种不同的方式编写此查询。

在标准 SQL 中,查询如下所示:

SELECT cr.car
FROM car.rentals cr 
GROPU BY cr.car
HAVING COUNT(DISTINCT re.customer) >= 10;

use.agregate函数sql代码如下

   select c.id  from car c inner join
    rentals r on      c.rentalid=r.rentalid
    group by c.id 
    having count(distinct customerid)>10

查询可以更像下面的查询。
内部查询与租赁 table 中的 car_id 相匹配,并检查是否有超过 10 个不同的客户租了一辆不同的汽车。

请注意,您可能需要将查询更改为使用您正在使用的正确 table 列。
您没有提供 table 结构和示例数据。

SELECT 
 Car.*
FROM
 Car
WHERE
 Car.id IN (

  SELECT 
   Rental.car_id
  FROM 
   Rental 
  GROUP BY 
   Rental.car_id
  HAVING 
   COUNT(DISTINCT Rental.customer_id) > 10
)

错误是我试图按 customer.id 而不是 car.id 分组,我试图在 jpql 查询语法中找到一个错误。 现在我的代码看起来像:

@Override
    public List<CarEntity> findCarsRentedByDifferentCustomers() {

        TypedQuery<CarEntity> query = entityManager.createQuery(
        "select car from CarEntity car " +
                "where car.id in (select re.car.id from RentalEntity re " +
                "group by re.car.id " +
                "having count(distinct re.customer.id) > 10)", CarEntity.class
        );

        return query.getResultList();
    }

@Raymond Nijland,@Zaynul Abadin Tuhin 感谢您的回答