Я хочу выбрать несколько элементов в своей БД на основе первичного ключа.

Поэтому, если у меня есть имя, я хочу выбрать imagename и refName из БД.

Я кое-что нашел здесь http://www.objectdb.com/java/jpa/query / jpql / select

TypedQuery<Object[]> query = em.createQuery(
      "SELECT c.name, c.capital.name FROM Country AS c", Object[].class);
  List<Object[]> results = query.getResultList();
  for (Object[] result : results) {
      System.out.println("Country: " + result[0] + ", Capital: " + result[1]);
  }

Что не работает, и кто-то другой, казалось, думал, что код был ужасно неправильным, поэтому мне любопытно, как именно я это сделаю?

Спасибо всем!

Caused by: java.lang.IllegalArgumentException: You have attempted to set a parameter value using a name of i.name that does not exist in the query string SELECT i.name, i.refName, i.imageName FROM Items AS i.
    at org.eclipse.persistence.internal.jpa.QueryImpl.setParameterInternal(QueryImpl.java:928)  at org.eclipse.persistence.internal.jpa.QueryImpl.setParameterInternal(QueryImpl.java:928)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.setParameter(EJBQueryImpl.java:593)
    at uploader.AdminControl.fileCreate(AdminControl.java:745)
    at uploader.AdminControl.upload(AdminControl.java:660)
    ... 57 more

..

TypedQuery<Object[]> q = em2.createQuery("SELECT i.name, i.refName, i.imageName FROM Items AS i",Object[].class);
q.setParameter("name", plan.getFace()[i].name);
System.out.println(q);


                            List<Object[]> results = q.getResultList();

                            for (Object[] result : results)
                            {
                            bw.write(result[1].toString());
                            bw.write(result[2].toString());
                            System.out.println("result:" + result[1].toString() + "and" + result[2].toString());
                            }
1
XaolingBao 10 Окт 2014 в 02:52
Так почему же в вашем запросе не упоминается refName, и если это должно быть основано на имени ("если у меня есть имя"), почему нет предложения WHERE?
 – 
David Conrad
10 Окт 2014 в 02:57
Это пример из ссылки выше... извините. Я просто показывал, что это то, что мне дали, правильно ли это использовать? обновлено, чтобы показать ошибку.
 – 
XaolingBao
10 Окт 2014 в 03:02
Дайте нам реальный код. Похоже, вы пытаетесь получить имя из класса Items POJO. Предметы звучат как несколько предметов...
 – 
bigGuy
10 Окт 2014 в 03:08
Да, он существует, и этот код работает // Запрос q = em2.createQuery("SELECT i FROM Items i WHERE i.name = :name"); // q.setParameter(name", plan.getFace()[i].name);// System.out.println("Total Points: " + q.getResultList()); Да, это класс сущности с именем Items , который подключается к информации в моей БД....... да, в таблице Items есть несколько элементов.....
 – 
XaolingBao
10 Окт 2014 в 03:13
Чего вы пытаетесь достичь с помощью q.setParameter("i.name", plan.getFace()[i].name); ?
 – 
bigGuy
10 Окт 2014 в 03:14

2 ответа

Лучший ответ

Проблема в этом коде:

q.setParameter("i.name", plan.getFace()[i].name);

Взгляните на свой JPQL:

SELECT i.name, i.refName, i.imageName FROM Items AS i

У вас нет параметра с именем i.name. Вы должны создать тот, который получит параметр. Что-то вроде

    SELECT i.name, i.refName, i.imageName FROM Items AS i where i.name = :parameterName

И передайте значение:

q.setParameter("parameterName", plan.getFace()[i].name);
2
uaiHebert 10 Окт 2014 в 03:17
Как я уже упоминал выше, у меня случайно оказался параметр с буквой «i». впереди, потому что я понял "ПОЧЕМУ НЕТ" :). Этот SELECT i.name, i.refName, i.imageName FROM Items AS i, где i.name = :parameterName, в конечном итоге работал для моих нужд. Я пытался использовать обычный оператор SELECT и выяснить все остальное, но я был немного сбит с толку относительно того, где мне нужно было что поставить, но это имеет смысл, так что большое спасибо@!@@
 – 
XaolingBao
10 Окт 2014 в 03:25

Проблема в имени параметра

TypedQuery<Object[]> q = em2.createQuery("SELECT i.name, i.refName, i.imageName FROM Items WHERE i.name = :someparam AS i",Object[].class);
q.setParameter("someparam", plan.getFace()[i].name);
0
bigGuy 10 Окт 2014 в 03:17
Как я упоминал выше, я случайно установил параметр с буквой «i». впереди, потому что я понял "ПОЧЕМУ НЕТ" :). это НЕ БЫЛО ошибкой.
 – 
XaolingBao
12 Окт 2014 в 02:05