0
所以,這裏是我的SQL原始查詢:麻煩重寫的SQL查詢到HQL查詢
SELECT o.offering_number,
o.english_description,
o.french_description,
fop.price_amount,
fop2.price_amount,
fop.price_type_code,
fop.offering_id,
fop2.offering_id
from facility_offering_price fop
join offering o on fop.offering_id = o.offering_id
inner join
(select
fop1.offering_id,
fop1.price_amount
from facility_offering_price fop1
WHERE fop1.price_type_code = 5
AND fop1.price_status_code = 1
) fop2 on fop.offering_id = fop2.offering_id
WHERE fop.price_start_date = '15-10-28'
AND fop.price_status_code IN (1,2)
/*AND (price_status_code IS NULL)*/
AND fop.price_type_code = 5
/*AND (o.offering_number IS NULL)*/
ORDER BY o.offering_number ASC, fop.price_sequence_number ASC;
這裏是HQL上面的查詢:
@Query("SELECT new com.frontier.dto.productprice.PendingPriceProduct("
+ " fop.facilityPhysicalOffering.offeringNumber,"
+ " fop.facilityPhysicalOffering.offering.description.englishDescription,"
+ " fop.facilityPhysicalOffering.offering.description.frenchDescription,"
+ " fop.priceAmount,"
+ " fop2.priceAmount,"
+ " fop.priceStatusCode"
+ ")"
+ " from FacilityOfferingPrice fop"
+ " INNER JOIN (SELECT fop1.offeringId, fop1.priceAmount FROM FacilityOfferingPrice fop1 WHERE "
+ " fop1.id.priceTypeCode = com.frontier.domain.type.PriceType.REG_RETAIL_PRICE"
+ " AND fop1.priceStatusCode = com.frontier.domain.type.OfferingPriceSts.CURRENT" +
") fop2 on fop.offeringId = fop2.offeringId"
+ " WHERE fop.priceStartDate = :priceStartDate"
+ " AND fop.priceStatusCode IN (:priceStatusCodes)"
+ " AND (:priceStatusCode IS NULL OR fop.priceStatusCode = :priceStatusCode)"
+ " AND fop.id.priceTypeCode = com.frontier.domain.type.PriceType.REG_RETAIL_PRICE"
+ " AND (:fromOfferingNumber IS NULL OR fop.facilityPhysicalOffering.offeringNumber >=:fromOfferingNumber)"
+ " ORDER BY fop.facilityPhysicalOffering.offeringNumber ASC, fop.id.priceSequenceNumber ASC")
List<PendingPriceProduct> findPendingPriceProducts(
@Param("priceStartDate") LocalDate priceStartDate,
@Param("priceStatusCodes") List<OfferingPriceSts> priceStatusCodes,
@Param("priceStatusCode") OfferingPriceSts priceStatusCode,
@Param("fromOfferingNumber") Long fromOfferingNumber,
Pageable pageable);
錯誤消息:意外的標記: (接近第1行,第372列) 因此,加入語法有些問題,在我用這個連接替換子查詢之前,這一切都很好。
我會感謝您的幫助
UPDATE:
新查詢:
@Query("SELECT "
+ " new com.frontier.dto.productprice.PendingPriceProduct("
+ " fop.facilityPhysicalOffering.offeringNumber,"
+ " fop.facilityPhysicalOffering.offering.description.englishDescription,"
+ " fop.facilityPhysicalOffering.offering.description.frenchDescription,"
+ " fop.priceAmount,"
+ " fop1.priceAmount,"
+ " fop.priceStatusCode"
+ ")"
+ " from FacilityOfferingPrice fop"
+ " INNER JOIN FacilityOfferingPrice fop1 on fop.offeringId = fop1.offeringId"
+ " WHERE fop.priceStartDate = :priceStartDate"
+ " AND fop.priceStatusCode IN (:priceStatusCodes)"
+ " AND (:priceStatusCode IS NULL OR fop.priceStatusCode = :priceStatusCode)"
+ " AND fop.id.priceTypeCode = com.frontier.domain.type.PriceType.REG_RETAIL_PRICE"
+ " AND (:fromOfferingNumber IS NULL OR fop.facilityPhysicalOffering.offeringNumber >=:fromOfferingNumber)"
+ " ORDER BY fop.facilityPhysicalOffering.offeringNumber ASC, fop.id.priceSequenceNumber ASC")
List<PendingPriceProduct> findPendingPriceProducts(
@Param("priceStartDate") LocalDate priceStartDate,
@Param("priceStatusCodes") List<OfferingPriceSts> priceStatusCodes,
@Param("priceStatusCode") OfferingPriceSts priceStatusCode,
@Param("fromOfferingNumber") Long fromOfferingNumber,
Pageable pageable);
新的錯誤: 路徑預期的加入!`InvalidPathException:無效的路徑: 'fop1.priceAmount'
謝謝,那看起來不錯。我試着將它翻譯成HQL,但不斷收到錯誤。你能幫我換換嗎? –
你會得到什麼錯誤? – StephaneM
我已更新我的帖子。 –