我已经将相当复杂的SQL查询转换为JPQL。突然,我发现因为我使用的是OPENJPA 1.2.8之前的2.0版本,所以ON-Clause无法正常工作。因此,很可能我无法使用“左开连接”。在这种情况下,最佳策略是什么?

JPQL查询:

select priceListTerm.SELLING_PRICE, priceListTerm.COMMISSION_FORMAT, priceListTerm.COMMISSION,
priceListAssignment.EFF_START_DATE, priceListAssignment.EFF_END_DATE,
priceListAssignment.PRIORITY_LEVEL,
venue.CODE, tb.HEADQUARTERS, vendor.NAME from PriceListTerm priceListTerm
JOIN PriceList priceList on priceListTerm.PRICELIST_UID = priceList.UIDPK
JOIN ProductSku productsku on priceListTerm.PRODUCTSKU_UID=productsku.UIDPK
LEFT OUTER JOIN
(PriceListAssignment priceListAssignment JOIN Venue venue on
 priceListAssignment.VENUE_UID=venue.UIDPK
 JOIN Vendor vendor on vendor.UIDPK=venue.VENDOR_UID)
on priceListAssignment.PRICELIST_UID = priceList.uidpk
where productsku.skuCode= :sku
and (vendor.name is null or vendor.name= :vendor)
order by priceListAssignment.PRIORITY_LEVEL;

最佳答案

我最终使用了本机查询。因此,有效的代码块如下:

...........
query = entityManager.createNativeQuery(GET_LOGICAL_SQL);

List<Object[]> list  = query.setParameter(1, skuCode).setParameter(2, vendorName).getResultList();

for (Object[] objects : list){
    BigDecimal sellingPrice = (BigDecimal)objects[0];
...........

关于mysql - 如果不允许ON-CLAUSE,如何在JPQL中替换LEFT OUTER JOIN?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26001048/

10-13 09:14