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
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...]