该项目正在使用 springmvc 构建 restful 服务,并且 JPA 将数据持久化到 DB 中。
我最近正在通过 Web 界面更新一个对象,我使用 jackson 将 post json 数据反序列化到对象类中。但是,我无法将对象合并回数据库。我有点知道从杰克逊反序列化的对象类是非托管的,这就是我合并的原因是什么都没发生。这是示例代码。
实体:
@Entity
@Table(name="Parent")
public class Parent{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonView(JsView.Public.class)
@Column(name = "id")
private Long Id;
@NotNull
@JsonView(JsView.Public.class)
private String name;
@NotNull
@JsonView(JsView.Public.class)
private String description;
@NotNull
@ManyToOne(fetch= FetchType.LAZY, cascade = {CascadeType.REFRESH})
@JoinColumn(name="creator_id")
@JsonView(JsView.Internal.class)
private User creator;
@OneToMany(mappedBy="quest", cascade = {CascadeType.REFRESH}, orphanRemoval = true)
private List<Collaboration> collaborators = new ArrayList<Collaboration>();
}
宁静的控制器:
@RequestMapping(value = "/parent/{id}/update", method = RequestMethod.PUT)
public ResponseEntity<String> updateQuestAttribute(@RequestBody String parentJson,@PathVariable("id") long parent_id) {
ObjectMapper mapper = new ObjectMapper();
Parent parent = null;
Parent newParent = mapper.readValue(parentJson, Parent.class);
updateParent = parentService.updateParent(questNew,parent_id);
服务层:
@PersistenceContext
private EntityManager entityMgr;
@Transactional
public Parent updateParent(Parent newp, long id){
Parent old = findOne(id);
Parent update = entityMgr.merge(newp);
return update;
}
我已经在 Junit 中用一些托管对象测试了这个方法,一切都很好。所以,我猜所有实体合并代码都是在正常情况下找到的。谁能告诉我问题是什么?谢谢