使用JPA问题更新查询

时间:2018-11-06 19:28:21

标签: jpa

我具有此功能

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行。

1 个答案:

答案 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