Я хочу выбрать несколько элементов в своей БД на основе первичного ключа.
Поэтому, если у меня есть имя, я хочу выбрать 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());
}
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);
Проблема в имени параметра
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);
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
refName
, и если это должно быть основано на имени ("если у меня есть имя"), почему нет предложенияWHERE
?