如何使用Spring Rest Controller和Spring Data 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);
}
请求体:
{
"employeeId":4,
"employeeName":"Paul",
"employeeDesgn":"Lead"
}
Hibernate更新查询:
update employee set company_id=?, employee_desgn=?, employee_name=? where employee_id=?
Spring Data JPA正在尝试将company_id设置为空以进行更新,即使我没有将其传递给请求体?但是如果我从数据库中得到实体,使用employee_id传递,然后如果我试图保存(),那么它的工作正常。
我想只更新通过请求体传递的实体属性。如何处理这种场景?
在另一个问题中,我使用apache commons的BeanUtils提出了一个解决方案:
public class NullAwareBeanUtilsBean extends BeanUtilsBean {
@Override
public void copyProperty(Object dest, String name, Object value) throws IllegalAccessException, InvocationTargetException {
if (value == null)
return;
super.copyProperty(dest, name, value);
}
}
您可以使用以下内容更新对象:
BeanUtilsBean notNull = new NullAwareBeanUtilsBean();
notNull.copyProperties(destObj, origObj);
这是我最初的回答
您可以按id查找员工,并仅填充这些值。下面是一个例子。
public Employee updateEmployee(Employee employee) {
Employee emp = employeeRepository.findOne(employee.getEmployeeId());
emp.setEmployeeName(employee.getEmployeeName());
emp.setEmployeeDesgn(employee.getEmployeeDesgn());
employeeRepository.save(emp);
}
仅更改员工姓名和员工设计。
问题内容: 我正在使用Spring Roo,使用Spring MVC和JPA来实现MySQL数据库的持久性。总的来说,我对Spring MVC和Java还是很陌生,但是已经使用CakePHP和Rails。 我有一个除密码外还包含个人详细信息的实体。诸如此类(不包括其他.aj文件中许多Roo生成的功能): 然后,我在控制器中执行了一个编辑操作,该操作是根据Roo自动生成的脚手架创建的以下约定: 再次
问题内容: 我收到一个包含30个字段的JSON,而我的实体是根据此JSON构建的。问题是:不应更新两个字段(两个日期)。 如果使用,两个字段都会更新。 如何避免更新这两个字段? 也许使用criteria.Example? 没有我写大量的HQL,有什么方法可以做到这一点吗? 问题答案: 本文非常详细地解释了您的问题,但我也将在这里进行总结。 如果您永远不想更新这两个字段,则可以将它们标记为: 当你将
我正在使用angularjs启动一个项目。我试图通过我的应用程序发送电子邮件使用Spring启动启动邮件。邮件的消息和对象是由用户以一种形式写的。我想做的是在我的RestController中使用@刚体获取消息和对象值。 我service.js中的功能 我的restContoller中的方法 @RestController公共类EmailController{ 这将引发此异常: 我怎么才能修好它?
我正在使用SpringRoo,使用SpringMVC和JPA对MySQL数据库进行持久化。一般来说,我对Spring MVC和Java非常陌生,但我曾经使用过CakePHP和Rails。 我有一个实体,除了密码之外还包含个人详细信息。类似这样的东西(不包括附加. aj文件中的许多Roo生成的功能): 然后,我在我的用户控制器中有一个编辑操作,我根据Roo自动生成的脚手架创建了以下约定: 以及一个J
问题内容: 这是表 用户数 和代码.. 问题答案: Ladislav的答案已更新为使用DbContext(在EF 4.1中引入):
我有一个User类,它有一些附加属性: 现在,如果我调用一些方法来改变其中一个房子(例如改变它的名称属性),如果我调用,我仍然会得到房子的旧值: 我如何确保它总是更新?