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

时间:2018-08-19 13:37:52

标签: mysql spring jpql

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

我需要编写查询查询来查找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。我已经尝试过以多种不同方式编写此查询。

4 个答案:

答案 0 :(得分:1)

查询可以更像下面的查询。
内部查询与“租车”表中的car_id相匹配,并检查是否有10个以上的独立客户租用了一辆独特的汽车。

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

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
)

答案 1 :(得分:0)

在标准SQL中,查询如下:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

错误是我尝试按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谢谢你的回答