2017-11-27 13 views
0

스프링 레스트 컨트롤러와 스프링 데이터 JPA를 사용하여 @RequestBody에서 전달 된 엔티티 속성 만 업데이트하는 방법은 무엇입니까?스프링 레스트 컨트롤러와 스프링 데이터를 사용하여 @RequestBody에서 전달 된 엔티티 속성 만 업데이트 JPA

직원 엔티티 :

@Entity 
@Table(name = "employee") 
@DynamicUpdate 
public class Employee { 
    @Id 
    @Column(name = "employee_id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer employeeId; 

    @Column(name = "employee_name") 
    private String employeeName; 

    @Column(name = "employee_desgn") 
    private String employeeDesgn; 

    @Column(name = "employee_email") 
    private String employeeEmail; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "company_id", referencedColumnName = "company_id") 
    private Company company; 
} 

서비스 클래스 방법 :

public Employee updateEmployee(Employee employee) { 
    return employeeRepository.save(employee); 
} 

RequestBody :

{ 
    "employeeId":4, 
    "employeeName":"Paul", 
    "employeeDesgn":"Lead" 
} 

최대 절전 모드 업데이트 쿼리 :

update employee set company_id=?, employee_desgn=?, employee_name=? where employee_id=? 

스프링 데이터 JPA가 RequestBody를 통해 전달하지 않더라도 JPA에서 company_id를 null로 설정하려고합니다. 하지만 employee_id를 사용하는 데이터베이스의 엔티티가 전달 된 다음 작업을 저장하려고 시도하면 (잘) 작동합니다.

요청 본문을 통해 전달되는 엔티티 속성 만 업데이트하고 싶습니다. 이 시나리오를 어떻게 처리할까요?

답변

0

직원을 찾을 수 있으며 해당 값만 채 웁니다. 아래의 예.

public Employee updateEmployee(Employee employee) { 
    Employee emp = employeeRepository.findOne(employee.getEmployeeId()); 

    emp.setEmployeeName(employee.getEmployeeName()); 
    emp.setEmployeeDesgn(employee.getEmployeeDesgn()); 

    employeeRepository.save(emp); 
} 

직원 이름과 직원 명만 변경됩니다.