Я пытаюсь получить значение карты из совместной коллекции, которая будет сравниваться со строкой List. Я получаю исключения.JPA 2.0 Query for Collection Карта для сравнения с List String
Вот мой запрос,
public long countByTypeAndPropertyKeyWithValue(List<String> type, String key, List<String> value, Date fromTime, Date toTime) {
EntityManager em = entityManagerFactory.createEntityManager();
Query query = em.createQuery("select count(o) from EbizEvent o JOIN o.properties p where o.type in :type and KEY(p)=:name and VALUE(p)= :val and o.timestamp between :fromTime and :toTime");
query.setParameter("type", type);
query.setParameter("name", key);
query.setParameter("val", value);
query.setParameter("fromTime", fromTime);
query.setParameter("toTime", toTime);
long count = (Long) query.getSingleResult();
return count;
}
В таблице EbizEvent есть таблица собственности, которая получает соединение,
@ElementCollection(fetch = FetchType.EAGER)
@MapKeyColumn(name="KEY")
@Column(name="VALUE")
@CollectionTable(name="EBIZ_EVENT_PROPERTY", [email protected](name="EVENT_ID"))
Map<String, String> properties = new HashMap<String, String>();
Проблема заключается в том, запрос продолжает получать исключение в области Значения,
Это работает, если мой val является просто строкой. Это ошибка, если я использую Список.
VALUE(p)= :val
Параметр "Параметр ('Val')" объявлены в «выберите отсчет (о) от EbizEvent O РЕГИСТРИРУЙТЕСЬ o.properties P, где o.type в: типа и KEY (р) =: имя и значение (p) =: val и o.timestamp между: fromTime и: toTime "устанавливается значение" [SGP] "типа" java.util.ArrayList ", но этот параметр привязан к полю типа" java.lang .String».
Я также попытался использовать IN, который работает в таблицах non Property, но все же исключает меня.
VALUE(p) IN :val
"ВСТРЕТИВШИЙСЯ "ЗНАЧЕНИЕ (р) IN" на символе 97, но ожидалось: [". (" ")", "*", "+", "-"," ""/",": "," < "," < = "," <> "," = ","> ","> "", "?", "ABS", "ALL", "AND", " ANY "," AS "," ASC "," AVG "," BETWEEN "," BOTH "," BY "," CASE "," COALESCE "," CONCAT "," COUNT "," CURRENT_DATE "," CURRENT_TIME " , «CURRENT_TIMESTAMP», «DELETE», «DESC», «DISTINCT», «ELSE», «EMPTY», «END», «ESCAPE», «EXISTS», «FETCH», «FROM», «GROUP», «ВХОД», «ВХОД», «ИНДЕКС», «ИННЕР», «ИС», «ВСТУПЛЕНИЕ», «КЛЮЧ», «ВЕДУЩИЙ», «ВЛЕВО», «ДЛИНА», «НРАВИТСЯ», «ЛОКАТ», , «MAX», «MEMBER», «MIN», «MOD», «NEW», «NOT», «NULL», «NULLIF», «OBJECT», «OF», «OR», «ORDER», «ВНЕШНИЙ», «ВЫБОР», «УСТАНОВКА», «РАЗМЕР», «НЕКОТОРЫЕ», «SQRT», «SUBSTRING», «SUM», «THEN», «TRAILING», «TRIM», «TYPE», «UPDATE», «UPPER», «VALUE», «WHEN», «WHERE»,,,,,,,,,]. " при анализе JPQL "выберите count (o) из EbizEvent o JOIN o.properties p где o.type in: type и KEY (p) =: name и VALUE (p) в: val и o.timestamp между: fromTime и: toTime ». См. Вложенную трассировку стека для исходной ошибки синтаксического анализа.
Я также пробовал :val member of VALUE(p)
, Это бросило ту же ошибку выше.
Ищите что-нибудь, что JPA над сетью окажется сложной задачей. Я не могу найти ничего, что находится в одной лодке.
Как я уже сказал, он работает, если val не является строкой List, а просто строкой. Итак, как это делает запрос неправильным с помощью JOIN? http://stackoverflow.com/questions/3730625/jpa-join-in-jpql – JaredT
Это был не я, кто поставил ваш ответ. Хотя я их не виню. Ответы должны быть проверены в определенной степени или иметь исследования, подтверждающие его. Что касается отрицательного рейтинга, возможно, попросите мод помочь вам. – JaredT
ОК, извините за разочарование. Если ваша проблема связана с отправкой списка, возможно, некоторые данные внутри списка обрабатывают запрос. – duardito