JPA eclipselink oracle db error: не выбрано выражение
Order OrderItem Product
-----------------------------------------------------------------------------
id id,orderId,proudctId,unitPrice,quantity id, barcode
JPA eclipseLink: список элементов заказа, порядок по их идентификатору, штрих-коду и количеству:
select * from OrderItem order by orderId asc,
lpad(product.barcode, 20, '0') desc, quantity asc
Query: ReadAllQuery(referenceClass=OrderItem sql="SELECT * FROM (SELECT a.*,
ROWNUM rnum FROM (SELECT DISTINCT t1.ID AS a1, t1.QUANTITY AS a2,
t1.UNITPRICE AS a3, t1.orderId AS a4, t1.productId AS a5, lpad(t0.barcode, ?, ?)
FROM Product t0, OrderItem t1 WHERE (t0.ID = t1.productId) ORDER BY t1.orderId
ASC, lpad(t0.barcode, ?, ?) DESC, t1.QUANTITY ASC) a WHERE ROWNUM <= ?) WHERE
rnum > ?")
ОШИБКА ORA-01791: не выбранное выражение
Если выполнение SQL в оракуле sqlPlus, ошибки нет. Если просто заказать по product.barcode вместо lpad(...), это работает.
1 ответ
Предполагая, что вы хотите заказать по тому же выражению lpad(p.barcode, ?, ?)
, вместо этого используйте его псевдоним. Попробуй это:
select *
from (
select a.*,
ROWNUM rnum
from (
select distinct o.ID as a1,
o.QUANTITY as a2,
o.UNITPRICE as a3,
o.orderId as a4,
o.productId as a5,
lpad(p.barcode, ?, ?) as a6
from Product p
join OrderItem o on p.ID = o.productId
order by a4,
a6 desc,
a2
) a
where ROWNUM <= ?
)
where rnum > ?
Также обратите внимание на явный синтаксис объединения, который более современный и понятный, чем старый синтаксис объединения на основе запятых, и переименованные псевдонимы для таблиц.