【发布时间】:2019-12-02 00:00:00
【问题描述】:
我正在创建一个 SpringBoot/Angular 8 应用程序,但在尝试更新解耦的前端/后端对象时遇到了一些问题。当我发送包含角度模型的 json 发布请求时,@JsonIgnore'd 或其他缺失值将更新为 null 而不是被忽略。
相关问题:
这个堆栈溢出问题密切相关,推荐的解决方案确实有效,但它破坏/绕过了一堆 Jackson/Hibernate 注释(例如 @Inheritance(strategy=InheritanceType.JOINED) 和 @Transient),所以我想寻找替代方案如果可能,解决方案:
hibernate partially update when entity parsed with json
Java POJO 示例
@Entity
@Table(name = "users")
@DynamicUpdate
public class User implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String a;
@Column
private String b;
@Column (nullable = false)
@JsonIgnore
private String c;
// standard getters and setters
}
Java Rest API 示例
@RequestMapping(value = "/api/user", method = RequestMethod.POST)
public @ResponseBody ResponseEntity<User> saveOrUpdate(@RequestBody User user, BindingResult result, HttpServletRequest request) {
if(user.getId()!=null){
user=ws.update(user);
}else{
user=us.create(user);
}
return new ResponseEntity<>(user,HttpStatus.OK);
}
Angular 服务方法示例
saveUser(user:User): Observable<User>{
const body = JSON.stringify(user);
return this.http.post<User>('/api/user', body).pipe(map( response => response));
}
现有数据库模型:
{
id:1,
a:"some value a"
b:"some value b"
c:"some value c"
}
角柱体:
{
id:1,
a:"some value a2"
b:"some value b2"
}
预期的休眠查询:
update users set a=?,b=? where id=?
实际休眠查询:
update users set a=?,b=?,c=? where id=?
在这种情况下,C 是一个空值。
【问题讨论】:
-
你需要先找到使用User foundUser=ws.findById(id);之后 BeanUtils.copyProperties(newUser, foundUser);并保存后。
-
如果用户实际存在与否,您是否不必验证您的数据库?
-
这仍然是一张未解决的票@spring-data-jpa...stackoverflow.com/q/43780226/592355,Johnatan Fox 的方法听起来很简单!
标签: angular spring hibernate spring-boot jackson