Я хотел бы сделать приведенный ниже запрос, который успешно выполняется в Postgres, в JPA. Я хотел бы перечислить все магазины, которые продали хотя бы 1 товар за первые 3 часа после открытия:
select * from shop s join item i on i.shopId = s.id where
i.sold_date - s.shop_open_date < interval '3 hours'
String sql = SELECT shop FROM ShopEntity shop JOIN shop.item where ((item.soldDate - shop.openDate) > interval '3 hours')
TypedQuery<ShopEntity> typedQuery = em.createQuery(sql,ShopEntity.class);
typedQuery.getResultList();
Причина: java.lang.IllegalArgumentException: исключение произошло при создании запроса в EntityManager:
Вызывается: org.eclipse.persistence.exceptions.JPQLException:
Описание исключения: синтаксическая ошибка синтаксического анализа [ВЫБРАТЬ магазин ИЗ ShopEntity shop СОЕДИНИТЬ shop.item ГДЕ ((item.soldDate - shop.openDate)> интервал «3 часа»)
[334, 530] Выражение не является допустимым условным выражением.
[530, 562] Запрос содержит неправильное окончание.
в org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildException (HermesParser.java:155)
в org.eclipse.persistence.internal.jpa.jpql.HermesParser.validate (HermesParser.java:334)
в org.eclipse.persistence.internal.jpa.jpql.HermesParser.populateQueryImp (HermesParser.java:278)
в org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildQuery (HermesParser.java:163)
в org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery (EJBQueryImpl.java:142)
в org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery (EJBQueryImpl.java:116)
в org.eclipse.persistence.internal.jpa.EJBQueryImpl. (EJBQueryImpl.java:102)
в org.eclipse.persistence.internal.jpa.EJBQueryImpl. (EJBQueryImpl.java:86)
в org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery (EntityManagerImpl.java:1614)
... 136 общих кадров опущено
]]