Обновить запрос с проблемой JPA - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть эта функция :

public void updateAnimal(int idToModify, String name, String type, int age) {
    entityManager.getTransaction().begin();
    Query query = entityManager.createQuery(
            "UPDATE PetHospital.Animal SET animalName=:name, animalType=:type, animalAge=:age WHERE idAnimal=:idToModify");
    query.setParameter("name", name);
    query.setParameter("type", type);
    query.setParameter("age", age);
    query.setParameter("idToModify", idToModify);
    query.executeUpdate();
    entityManager.getTransaction().commit();
}

И я получаю это ошибок :

Исключение в потоке "main" java.lang.IllegalArgumentException: исключение произошло при создании запроса в EntityManager: Exception Описание: синтаксический анализ ошибок [ОБНОВЛЕНИЕ PetHospital.Animal SET animalName =: name, animalType =: type, animalAge =: age WHERE idAnimal =: idToModify]. [30, 40] Выражение пути должно начинаться с идентификационная переменная. [50, 60] Выражение пути должно начинаться с идентификационная переменная. [70, 79] Выражение пути должно начинаться с идентификационная переменная. в org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery (EntityManagerImpl.java:1605) at util.DatabaseUtil.updateAnimal (DatabaseUtil.java:84) at main.Main.main (Main.java:32) Причина: Исключение [EclipseLink-0] (Службы поддержки Eclipse - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.JPQLException Exception Описание: синтаксический анализ ошибок [ОБНОВЛЕНИЕ PetHospital.Animal SET animalName =: name, animalType =: type, animalAge =: age WHERE idAnimal =: idToModify]. [30, 40] Выражение пути должно начинаться с идентификационная переменная. [50, 60] Выражение пути должно начинаться с идентификационная переменная. [70, 79] Выражение пути должно начинаться с идентификационная переменная. в org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildException (HermesParser.java:155) в org.eclipse.persistence.internal.jpa.jpql.HermesParser.validate (HermesParser.java:334) в org.eclipse.persistence.internal.jpa.jpql.HermesParser.populateQueryImp (HermesParser.java:278) в org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildQuery (HermesParser.java:163) в org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery (EJBQueryImpl.java:142) в org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery (EJBQueryImpl.java:116) в org.eclipse.persistence.internal.jpa.EJBQueryImpl. (EJBQueryImpl.java:102) в org.eclipse.persistence.internal.jpa.EJBQueryImpl. (EJBQueryImpl.java:86) в org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery (EntityManagerImpl.java:1603) ... еще 2

Я хочу, чтобы при вызове этой функции в main с этими параметрами обновлялась строка SQL новыми значениями, полученными по параметрам.

1 Ответ

0 голосов
/ 06 ноября 2018

Ошибка «Выражение пути должно начинаться с идентификационной переменной.» Описывает проблему с «путем». Путь является точечной нотацией, которая идентифицирует поле. См., Например, Пути и типы в JPQL и Criteria API .

Итак, вам, вероятно, нужно сказать

UPDATE PetHospital.Animal a SET a.animalName=:name, a.animalType=:type, a.animalAge=:age WHERE a.idAnimal=:idToModify
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...