【问题标题】:updating a value from relation using JPA CriteriaUpdate使用 JPA CriteriaUpdate 从关系更新值
【发布时间】:2020-03-13 22:22:04
【问题描述】:
我在两个实体 A 和 B 之间有一个组合关系(A 是所有者),我需要使用所有者实体“A”作为根使用 JPA CriteriaUpdate 来更新拥有的实体“B”中的字段值,我试过了像这样设置整个实体 B 的值:
criteriaUpdate.from(A.class).set("B",valueOfB);
但它不起作用,因为它没有遍历关系,
请问我应该怎么做?
【问题讨论】:
标签:
java
hibernate
jpa
criteria-api
jpa-2.1
【解决方案1】:
试试这个:
// Create criteria builder
CriteriaBuilder cb = this.em.getCriteriaBuilder();
//In Criteria Update cant define Joins, use B as Root entity
CriteriaUpdate<B> cq = cb.createCriteriaUpdate(B.class);
Root rootB = cq.from(B.class);
//Set te value in entity B (access property by Metamodel)
cq.set(rootB.get(B_.propertie), **newValue**);
//Set te condition over Root.Join.property (access propery by Metamodel)
cq.where(cb.equals(rootB.get(B_.a).get(A_.property),**valueEqualsPropertyB**));
em.createQuery(cq).executeUpdate();
请注意,标准中的批量更新不尊重同一事务中的指令执行顺序。