2016-08-25 10 views
0

Я пытаюсь получить значение карты из совместной коллекции, которая будет сравниваться со строкой 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 над сетью окажется сложной задачей. Я не могу найти ничего, что находится в одной лодке.

ответ

-1

проверьте ваш запрос, я думаю, что это неправильно, вы используете JOIN без ВКЛ.

+0

Как я уже сказал, он работает, если val не является строкой List, а просто строкой. Итак, как это делает запрос неправильным с помощью JOIN? http://stackoverflow.com/questions/3730625/jpa-join-in-jpql – JaredT

+0

Это был не я, кто поставил ваш ответ. Хотя я их не виню. Ответы должны быть проверены в определенной степени или иметь исследования, подтверждающие его. Что касается отрицательного рейтинга, возможно, попросите мод помочь вам. – JaredT

+0

ОК, извините за разочарование. Если ваша проблема связана с отправкой списка, возможно, некоторые данные внутри списка обрабатывают запрос. – duardito

 Смежные вопросы

  • Нет связанных вопросов^_^