使用spring data jpa保存或更新或删除实体集合的最佳方法是什么?

时间:2018-08-24 10:20:44

标签: hibernate spring-boot spring-data-jpa

我有一个实体Employee。 例如: 我已经将一些记录保存到数据库中,如下所示:

employeeRepository.save(employees);

在下一个请求中,我想更新几个已保存的实体,删除几个已保存的实体,并重新创建几个实体。

请让我知道在Spring数据JPA中执行此操作的简单方法。

2 个答案:

答案 0 :(得分:0)

实例化并使用 EmployeeRepository 要实例化扩展了 CrudRepository EmployeeRepository ,我们可以使用依赖项注入。

public class EmployeeService {
    @Autowired    
    private EmployeeRepository employeeRepository;
    Employee saveEmployee(Employee employee){
    employeeRepository.save(employee);  
    }
    List<Employee> saveEmployee(List<Employee> employees){
        for(Employee employee:employees){
            saveEmployee(employee);         }   
    } 
    void deleteEmployee(Employee employee){
        employeeRepository.delete(employee);
    }
    void deleteEmployee(List<Employee> employees){
        for(Employee employee:employees){
            deleteEmployee(employee);
        }
    } 
}

现在,我们准备使用CrudRepository的方法。查找该示例的某些方法。

  1. 创建并更新一个实体:

SavedEmployee = EmployeeRepository.save(employee);

  1. 删除一个实体::

employeeRepository.delete(employee);

如果执行批量操作,则可以覆盖 EmployeeService 类上的 saveEmployee() deleteEmployee()

答案 1 :(得分:0)

您主要想尽可能地利用Spring Data JPA的派生查询功能!您绝对不想编写自己的样板代码,因为这完全违反了Spring Data JPA的目的!

删除

执行此操作的最佳(也是最简洁的)方法是让Spring Data JPA 派生为您查询:

public interface EmployeeRepository extends CrudRepository<Employee, Long> {

    Long deleteByIdIn(List<Long> employeeIdsToDelete);

}

请参见this answer

更新

更新可以通过以下方式完成:

@Modifying
@Query("update Employee empl set empl.param =:param where empl.id =:emplId")
void updateEmployees(@Param("emplId") Long emplId, @Param("param") paramValue);

否则,可以结合使用查找和修改来完成(可能在Service方法中:

public void myEmployeeServiceUpdateMethod(List<Long> emplIds) {
    List<Employee> employees = employeeRepository.findByIdIn(emplIds);
    employees.forEach(empl -> empl.setParam("NewParam!");
}

Spring JPA会自动为您刷新并更新这些值!

请参见this answer

创建

创建您已经正确执行的操作。只需将新实体列表传递到#save