JPA CriteriaUpdate join self table

时间:2016-10-03 13:30:58

标签: java mysql jpa criteria-api

我在普通的SQL中有这句话,我试图在Java JPA中实现。

UPDATE table t1, table t2
SET
    t1.field1 = t2.field1,
    t1.field2 = t2.field2
WHERE 1 = 1
    AND t1.field3 = t2.field3
    AND t1.field4 = t2.field4
;

基本上是几个领域的自我加入和其他领域的更新。

@Entity
@Table(name = "table")
@XmlRootElement
public class Table implements Serializable{
    private static final long serialVersionUID = 1L;
    private String field1;
    private String field2;
    private String field3;
    private String field4;

    public Table(){}

    // Getters and Setters
}

当我尝试在我的方法中实现时:

[...]
CriteriaBuilder builder = this.em.getCriteriaBuilder();
CriteriaUpdate<Table> cu = builder.createCriteriaUpdate(Table.class);

Root<Table> t1 = cu.from(Table.class);
Root<Table> t2 = cu.from(Table.class);

Predicate p1 = builder.equal(t1.get(Table_.field3), t2.get(Table_.field3));
Predicate p2 = builder.equal(t1.get(Table_.field4), t2.get(Table_.field4));

cu.where(builder.and(p1, p2));

cu.set(t1.get(Table_.field1), t2.get(Table_.field1));
cu.set(t1.get(Table_.field2), t2.get(Table_.field2));

Query queryUpdate = this.em.createQuery(cu);
int ret = query.executeUpdate();


[...]

但结果总是改变0行,此外还有很少的行应该被修改。

有人遇到过类似的事情。

任何想法都会非常有用。

非常感谢!

0 个答案:

没有答案
相关问题