Играть!Framework - Выполнение запроса JPA для диапазона значений с использованием IN - PullRequest
3 голосов
/ 30 мая 2011

Я пытался получить значения из базы данных, используя IN. Я понял, что мне нужно написать запрос JPA, как

o.country IN (’UK’, ’US’, ’France’)  

поэтому я попытался написать запрос

List result = Playlist.find("id in ?", values).fetch();  

, где values=set of integers

но он не компилируется во время выполнения

java.lang.ClassCastException: java.util.HashSet cannot be cast to java.lang.Integer   

Как мне это исправить?

Исправлено

Я также опубликовал это в группах Google и получил ответ, который, кажется, работает

List<Integer> countries = (list of integers for ’UK’, ’US’, ’France’) 
List result = Playlist.find("id in (:countries)").bind("countries", 
countries).fetch(); 

1 Ответ

2 голосов
/ 30 мая 2011

Я не совсем уверен в некоторых аспектах вашего вопроса:

  • Я ничего не знаю о классе Playlist и его методах.
  • Что вы подразумеваете под "но он не компилируется во время выполнения"? Он не компилируется или не запускается?

В любом случае вот (модифицированный и, следовательно, непроверенный) пример из моей кодовой базы:

В классе сущности JPA: @NamedQuery(name = "findFoo", query = "select f from Foo f where f.state in :stateInList")

Там запрос используется так:

final Query query = this.entityManager.createNamedQuery("findFoo");
final Set<FooState> states = new HashSet<FooState>(Arrays.asList(FooState.STARTED, FooState.FAILED));
query.setParameter("stateInList", states);
final List<Foo> retval = query.getResultList();
return retval;

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...