powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / вывод из бд используя оператор IN в JPQL
38 сообщений из 38, показаны все 2 страниц
вывод из бд используя оператор IN в JPQL
    #39103722
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
ребята помогите разобраться с проблемой, я что то недопонимаю в JPQL запросе...
в общем есть такой запрос:
Код: java
1.
@NamedQuery(name = "Product.compareSelected", query = "SELECT o FROM Product o where o.idProduct IN (:m)")



соответственно сессионный бин:
Код: java
1.
2.
3.
4.
5.
/** <code>SELECT o FROM Product o where o.idProduct IN (:m)</code> */
    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public List<Product> getProductCompareSelected(List m) {
        return em.createNamedQuery("Product.compareSelected", Product.class).setParameter("m", m).getResultList();
    }



есть страница и на нем такая строка который при нажатии сработает javascript
Код: html
1.
2.
3.
4.
<input type="button" value="Сравнить" id="compare" />
...
<input type="checkbox" value="${p.idProduct}" class="idP_${p.idProduct}"/>На сравнение<br/>
...



скрипт при нажатии баттона честно получает все нужные данные в моем случае id и добавляет в массив для отправки сервлету
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
$(document).ready(function () {
    $('#compare').click(function () {

        var m = [];
        //var n = $('input:checked');
        var arr = $('input:checked');
        arr.each(function (index, el) {
            var pr = el.value;
            m.push(pr);
        });
        console.log(m);

        window.open('http://127.0.0.1:7001/webapp/compare?m='+m.join(','));
    });
});



в целом вопрос что (каком виде) передать из сервлета чтоб это все заработало?
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103857
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никаких мнений?
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103874
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Музаффар, и где ваш код того сервлета, из которого надо что-то передать? Параметры запроса в сервлете не умеете разобрать? Поточнее сформулируйте, пожалуйста, свою проблему.
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103885
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yelena,

ну там примерно вот так:
Код: java
1.
2.
3.
4.
5.
6.
7.
...
m = request.getParameter("m"); //получаю строку от javascript'а
...
List <String>l = Arrays.asList(m.split(","));

List<Product> cPr = sel.getProductCompareSelected(m); //передаю этот же параметр в наименованный запрос
...



то получаю вот такую ошибку:
Код: plaintext
javax.ejb.EJBException: EJB Exception: : java.lang.IllegalArgumentException: You have attempted to set a value of type class java.util.Arrays$ArrayList for parameter m with expected type of int from query string SELECT o FROM Product o where o.idProduct IN (:m).

да тут говорит что я предлагаю лист вместо инт...
вообщем путаница... вот ссылка вроде тоже лист используется... но увы
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103912
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Музаффар, скобки убирать не пробовали?

Код: java
1.
SELECT o FROM Product o where o.idProduct IN :m
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103914
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Музаффар, только что заметила:

Код: java
1.
List <String>l = Arrays.asList(m.split(","));



Почему List <String>, если действительно надо List <Integer> ?
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103915
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Музаффар
Код: java
1.
2.
3.
4.
5.
6.
7.
...
m = request.getParameter("m"); //получаю строку от javascript'а
...
List <String>l = Arrays.asList(m.split(","));

List<Product> cPr = sel.getProductCompareSelected(m); //передаю этот же параметр в наименованный запрос
...



так getProductCompareSelected() принимает лист, а вы в него строку...
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103921
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174
так getProductCompareSelected() принимает лист, а вы в него строку...

опечатка там "l"
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103924
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yelenaПочему List <String>, если действительно надо List <Integer> ?

да но как из строки 1,2,3,... получить такой List<Integer>?
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103934
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МузаффарyelenaПочему List <String>, если действительно надо List <Integer> ?

да но как из строки 1,2,3,... получить такой List<Integer>?

ты шутишь? если серьезно, то ты, как бы сказать, бежишь впереди паровоза под названием java core
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103942
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174как бы сказать, бежишь впереди паровоза под названием java core

может быть... походу надо чуток отдыхать... а то мозг начинает просто тупить...
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103951
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
...
        List<String> l = Arrays.asList(m.split(","));

        List<Integer> intList = new ArrayList<Integer>();
        for (String strList : l) {
            intList.add(Integer.valueOf(strList));
        }
        //System.out.println("qweqweqwe "+intList);
        List<Product> cPr = sel.getProductCompareSelected(intList);
        for (Product p : cPr) {
             System.out.println(p.getP_name());
        }



получаю ту же ошибку...
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103955
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Музаффар, какую реализацию JPA вы используете?
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103960
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yelena,

ТопЛинк
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103964
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Музаффар, какая версия? Поддерживает ли она IN ? Гуглить не пробовали?
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103965
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yelena,
нет не пробовал но там поддерживается...
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103966
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Музаффар, старовата ссылка, но есть над чем задуматься

http://stackoverflow.com/questions/1170266/list-as-a-named-parameter-in-jpa-query-using-toplink
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103967
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yelena,

http://www.roseindia.net/jpa/eclipsejpaexamples/named-parameter-list.shtml

даже пробовал на прямую написать в запросе эти параметры типа 1,2,3 все работала
а вот когда динамически хочу делать что то не нравиться, да я понимаю что я не правильно ввожу параметр, но что я должен передавать в качестве параметра?
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39103973
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39104749
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффардаже пробовал на прямую написать в запросе эти параметры типа 1,2,3 все работала
а вот когда динамически хочу делать что то не нравиться, да я понимаю что я не правильно ввожу параметр, но что я должен передавать в качестве параметра?Предикат IN принимает не один параметр, а список из одного или более параметров.
Или генерируйте "... in (?, ..., ?) ..." с максимально допустимым числом элементов списка (1000 для Oracle) и заполняйте все неиспользуемые элементы каким-нибудь нейтральным значением.
Или собирайте запрос динамически - весь запрос одна (литерная) строка.
Или заполняйте глобальную временную таблицу (GTT) списком значений и делайте соединение с этой таблицей.
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39104756
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovПредикат IN принимает не один параметр, а список из одного или более параметров.
Актуальные версии ORM понимают и список.
http://stackoverflow.com/questions/961816/proper-way-of-writing-a-hql-in-query
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39104790
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Принимать это хорошо, вопрос в том, что они с этим списком делают ...
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39104795
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovПринимать это хорошо, вопрос в том, что они с этим списком делают ...
Разворачивают в SQL. Всё равно все параметры генерить.
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39104844
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

можете подсказать что конкретно передать в качестве параметра? List<Integer> или что то другое?
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39104848
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МузаффарBlazkowicz,

можете подсказать что конкретно передать в качестве параметра? List<Integer> или что то другое?
Вы скобки убрали? Какой актуальный код?
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39104852
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВы скобки убрали?
Вы про квадратных скобок?
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39104855
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МузаффарBlazkowiczВы скобки убрали?
Вы про квадратных скобок?
Код: java
1.
@NamedQuery(name = "Product.compareSelected", query = "SELECT o FROM Product o where o.idProduct IN :m")


http://stackoverflow.com/a/4379008
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39104872
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

прошу прошение но как эти скобки влияют?
т.к. без них заработала... :)
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39104886
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и влияют: "in параметр" - ORM генерирует SQL-запрос со списком, "in (параметр)" - ORM предполагает, что вы знаете, что делаете.
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39104896
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

т.е. когда я писал (:m) то орм сгенерировал ((1,2,3,4)) ?
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39104901
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я предполагаю, что ORM для "in (:m)" сгенерировал что-то вроде "in ('1, 2, 3')", но такие вещи лучше смотреть логах.
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39104911
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

странное поведение, т.к. из-за этого человек долго будет возится с этой проблемой...
в логах показал ту ошибку который я привел пораньше...
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39104946
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если "показал ту ошибку", то "SQL запрос вообще не был создан".
И что значит "странное поведение", если подстановка единственный стандартный символ подстановки для SQL-сервера - знак вопроса? И, соответственно, параметры - только позиционные.
Даже именованные параметры - расширение, которого может и не быть.
Какое поведение, по вашему, является "не странным" и совместимо с возможностями (потенциально любой) СУБД?
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39105099
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

я Вас понял, спасибо за ответы
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39105176
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарстранное поведение, т.к. из-за этого человек долго будет возится с этой проблемой...
в логах показал ту ошибку который я привел пораньше...
Пишут что в спеке на JPQL это есть. Но я не нашел.
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39105177
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЯ предполагаю, что ORM для "in (:m)" сгенерировал что-то вроде "in ('1, 2, 3')", но такие вещи лучше смотреть логах.
Нет. Там именно JPQL процессор обрыгался. Скобки влияют.
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39105192
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В JPQL такого не нашел, а вот в HQL есть:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
in_expression ::= single_valued_expression
            [NOT] IN single_valued_list

single_valued_list ::= constructor_expression |
            (subquery) |
            collection_valued_input_parameter

constructor_expression ::= (expression[, expression]*)
...
Рейтинг: 0 / 0
вывод из бд используя оператор IN в JPQL
    #39105251
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
спасибо!
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / вывод из бд используя оператор IN в JPQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]