Как обновить таблицу в данных пружины JPA, используя предложение where - PullRequest
0 голосов
/ 27 февраля 2019

Я хочу обновить определенную запись в таблице, и я использую первичный ключ (empId) и еще один столбец (empSalary) для идентификации конкретного столбца.Как мы знаем, первичного ключа (empId) достаточно для идентификации записи.Но в моем случае я хочу обновить запись, если зарплата этого сотрудника составляет 1000. Есть ли возможность обновить запись, используя сущность, а не запрос?Я использую пружинные данные JPA

Пример:

public class Employee {

    @Id
    @Column
    private int empId;

    @Column
    private String name;

    @Column
    private float salary;

    @Column
    private String state;

    // getters, setters
}

Я хочу обновить всю таблицу, если empId и salary соответствуют таблице.

1 Ответ

0 голосов
/ 27 февраля 2019

В EmployeeRepository создайте следующий метод:

findOneByEmpIdAndSalary(Integer empId, Float salary);

Затем вы можете передать salary = 1000.0 или создать метод по умолчанию в том же хранилище с таким значением hardcoded;

public interface EmployeeRepository extends JpaRepository<Employee, Integer> {

    Optional<Employee> findOneByEmpIdAndSalary(Integer empId, Float salary);

    default Optional<Employee> findOneByEmpIdAndSalaryEqualTo1000(Integer empId) {
        return findOneByEmpIdAndSalary(empId, 1000.0);
    }
}

Я использовал findOne, так как вы уже выбираете с помощью первичного ключа плюс дополнительное условие, так что вы получите либо один, либо ни одного, таким образом, используя Optional<T> в качестве результата, для управлениялюбая возможность лучше.

После извлечения этой сущности в состоянии @Transactional просто обновите полученную сущность.Если Optional не пусто, то окончание транзакции будет фиксировать это обновление в БД, иначе ничего.

@Transactional
public String updateWithCondition(Integer empId) {
    employeeRepository.findOneByEmpIdAndSalaryEqualTo1000(empId)
            .ifPresent(employee -> employee.setState("desired Update"));
}

Как в приведенном выше фрагменте в качестве примера.

...