почему этот запрос работает непосредственно на базе данных Postgres:почему это странное поведение OpenJpa?
select m from medicine_case m WHERE m.id IN (select m.id FROM medicine_case m LEFT OUTER JOIN patient ON m.patient=patient.id ORDER BY patient.surname ASC)
И в OpenJPA с точным соответствующим типизированного запроса:
String sql = " select m from medicine_case m WHERE m.id IN (select m.id FROM medicine_case m LEFT OUTER JOIN "
+ "patient ON m.patient=patient.id ORDER BY patient.surname ASC)";
TypedQuery<MedicineCase> query = persistenceClient.createQueryMC(sql);
setParameter(query);
query.setFirstResult(first);
query.setMaxResults(count);
дает мне:
org.apache.openjpa.persistence.ArgumentException: Encountered "m . id IN (select m . id FROM medicine_case m LEFT OUTER JOIN patient ON" at character 37, but expected: ["(", ")", "*",.... etc etc
почему ??? ?? это так странно и делает меня сумасшедшим!
код, который создает запрос от менеджера объекта:
return entityManager.createQuery(sql, MedicineCase.class);
и код, который выполняет это:
return query.getResultList().iterator();
Вы уверены, что SQL работает в Postgres? Есть ли столбец «m»? – Thilo
Между строкой, в которой вы инициализируете 'String sql' и' TypedQuery query', вы должны проверить значение 'sql' через точки останова или вывести' sql'. –
nhgrif
да, это работает, я выполнил его в консоли postgres ... и там нет столбца с именем m, но этот синтаксис означает, что вы хотите в результате получить объект m, представляющий таблицу, а не только список столбцов – andPat