【发布时间】:2018-05-10 18:15:03
【问题描述】:
如何使用 Spring Rest Controller 和 Spring Data JPA 仅更新从 @RequestBody 传递的实体属性?
员工实体:
@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);
}
请求正文:
{
"employeeId":4,
"employeeName":"Paul",
"employeeDesgn":"Lead"
}
休眠更新查询:
update employee set company_id=?, employee_desgn=?, employee_name=? where employee_id=?
Spring Data JPA 试图将 company_id 设置为 null 以进行更新,即使我没有通过 RequestBody 传递它? 但是,如果我使用employee_id 从数据库中获取实体,然后如果我尝试保存(),那么它工作正常。
我只想更新通过请求正文传递的实体属性。这种情况如何处理?
【问题讨论】:
-
您似乎缺少您的控制器以及您如何提交您的实体
标签: hibernate spring-mvc spring-data-jpa spring-rest