JPQL - Select 超过 10 个不同客户租用的汽车
JPQL - Select cars rented by more than 10 different customers
我有 3 个实体:Car、Rental 和 Customer。
租车与汽车和客户有关。
我需要编写查询来查找 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();
}
我总是得到 DataIntegrityViolationException
或 InvalidDataAccessApiUsageException
。我已经尝试过以多种不同的方式编写此查询。
在标准 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 感谢您的回答
我有 3 个实体:Car、Rental 和 Customer。 租车与汽车和客户有关。
我需要编写查询来查找 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();
}
我总是得到 DataIntegrityViolationException
或 InvalidDataAccessApiUsageException
。我已经尝试过以多种不同的方式编写此查询。
在标准 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 感谢您的回答