Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate CriteriaUpdate的JPA setParameter异常_Hibernate_Jpa_Eclipselink - Fatal编程技术网

Hibernate CriteriaUpdate的JPA setParameter异常

Hibernate CriteriaUpdate的JPA setParameter异常,hibernate,jpa,eclipselink,Hibernate,Jpa,Eclipselink,下面的代码片段 @Entity public class A { @Id@GeneratedValue private Long id; private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } @编辑 添加了不调用已通过的#setParameter的测试 只是检查查询的其

下面的代码片段

@Entity
public class A {    
    @Id@GeneratedValue private Long id;
    private String name;
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

@编辑

  • 添加了不调用已通过的
    #setParameter
    的测试

只是检查查询的其余部分是否正常。。您是否尝试过删除ParameterExpression并将字符串“Joe”直接放入
CriteriaUpdate#set()中
method?如果您的JPA提供程序不支持UPDATE子句中的参数,则在JPA提供程序上提出一个问题以支持它。根据我的经验,CriteriaBuilder与一个查询相关,不应在不同的查询之间重复使用。您应该使用新的CriteriaBuilder创建第二个查询,并且不要在它和第一个查询之间共享任何内容。只是为了检查查询的其余部分是否工作正常。。您是否尝试过删除ParameterExpression并将字符串“Joe”直接放入
CriteriaUpdate#set()中
method?如果您的JPA提供程序不支持UPDATE子句中的参数,则在JPA提供程序上提出一个问题以支持它。根据我的经验,CriteriaBuilder与一个查询相关,不应在不同的查询之间重复使用。您应该使用新的CriteriaBuilder创建第二个查询,并且不在它和第一个查询之间共享任何内容。
    tx.begin();
    em.persist(new A());
    tx.commit();

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaUpdate<A> update = cb.createCriteriaUpdate(A.class);
    Root<A> a = update.from(A.class);
    ParameterExpression<String> param = cb.parameter(String.class);

    tx.begin();
    em.createQuery(update.set(a.<String> get("name"), "julie")).executeUpdate();
    tx.commit();

    tx.begin();
    em.createQuery(update.set(a.<String> get("name"), param))
            .setParameter(param, "joe").executeUpdate();
    tx.commit();
java.lang.IllegalArgumentException: Could not resolve binding for given parameter reference 
[org.hibernate.query.criteria.internal.expression.ParameterExpressionImpl...]