我有一个实体Employee。 例如: 我已经将一些记录保存到数据库中,如下所示:
employeeRepository.save(employees);
在下一个请求中,我想更新几个已保存的实体,删除几个已保存的实体,并重新创建几个实体。
请让我知道在Spring数据JPA中执行此操作的简单方法。
答案 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的方法。查找该示例的某些方法。
SavedEmployee = EmployeeRepository.save(employee);
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
。