更新JPA CriteriaUpdate中的现有列值

Ash*_*tan 7 orm eclipselink jpa-2.1

我有一个实体用户,我的用户数据库值是:

name     totalScore
--------------------
ABC        25
XYZ        30
Run Code Online (Sandbox Code Playgroud)

现在我想运行查询

update user set totalScore=totalScore+ (2*totalScore);
Run Code Online (Sandbox Code Playgroud)

我们怎样才能通过JPA 2.1 CriteriaUpdate实现它?

CriteriaBuilder criteriaBuilder = em().getCriteriaBuilder();
       //Updates the salary to 90,000 of all Employee's making more than 100,000.
        CriteriaUpdate update = criteriaBuilder.createCriteriaUpdate(User.class);
        Root user = update.from(User.class);
        Expression<Long> abc=user.get("totalScore");

        update.set("totalScore", ?? ); 
// what expression is here to be used to replace old value with new 
        Query query = em().createQuery(update);
        int rowCount = query.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

小智 8

您可以使用此代码.它会对你有用

// Gives all Employees a 10% raise.

CriteriaUpdate update = criteriaBuilder.createCriteriaUpdate(Employee.class);

Root employee = update.from(Employee.class);

update.set(employee.get("salary"),criteriaBuilder.sum(employee.get("salary"), criteriaBuilder.quot(employee.get("salary"), 10));

Query query = entityManager.createQuery(update);
int rowCount = query.executeUpdate();
Run Code Online (Sandbox Code Playgroud)