2017-11-27 4 views
0

Spring Rest ControllerとSpring Data JPAを使用して@RequestBodyから渡されたエンティティ属性のみを更新するには?Spring Rest ControllerとSpring Data JPAを使用して@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=? 

Spring Data JPAはRequestBodyを通過していなくてもcompany_idをnullに設定しようとしていますか? しかし、employee_idを使用してデータベースからエンティティを取得した場合、その作業を正常に保存しようとした場合、

リクエストボディで渡されるエンティティ属性のみを更新したいとします。このシナリオをどのように処理するのですか?

答えて

0

あなたはIDで従業員を見つけて、それらの値のみを入力することができます。以下の例。

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

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

    employeeRepository.save(emp); 
} 

従業員名と従業員の意向のみが変更されます。

関連する問題