我具有此功能:
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();
}
我得到这个错误:
线程“主”中的异常java.lang.IllegalArgumentException:在EntityManager中创建查询时发生了异常:异常 说明:语法错误解析[UPDATE PetHospital.Animal SET 动物名称=:名称,动物类型=:类型,动物年龄=:年龄 idAnimal =:idToModify]。 [30,40]路径表达式必须以 识别变量。 [50,60]路径表达式必须以 识别变量。 [70,79]路径表达式必须以 识别变量。 在org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1605) 在util.DatabaseUtil.updateAnimal(DatabaseUtil.java:84) 在main.Main.main(Main.java:32)上,由于:异常[EclipseLink-0](Eclipse持久性服务- 2.5.2.v20140319-9ad6abd):org.eclipse.persistence.exceptions.JPQLException异常 说明:语法错误解析[UPDATE PetHospital.Animal SET 动物名称=:名称,动物类型=:类型,动物年龄=:年龄 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
行。
答案 0 :(得分:0)
错误“路径表达式必须以标识变量开头。”描述了“路径”的问题。路径是标识字段的点符号。参见例如Paths and Types in JPQL and Criteria API。
所以,您可能需要说
UPDATE PetHospital.Animal a SET a.animalName=:name, a.animalType=:type, a.animalAge=:age WHERE a.idAnimal=:idToModify