プロジェクトは springmvc を使用して安らかなサービスを構築しており、JPA はデータを DB に永続化します。
私は最近、Web インターフェイスを介して 1 つのオブジェクトを更新する作業を行っています。jackson を使用して、ポスト json データをオブジェクト クラスに逆シリアル化します。ただし、オブジェクトをデータベースにマージするのに問題があります。jackson から逆シリアル化されたオブジェクト クラスが管理されていないことを知っていました。それが、マージが何も起こらない理由です。これがサンプルコードです。
実在物:
@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 の管理対象オブジェクトでこのメソッドをテストしましたが、すべてうまくいきました。したがって、すべてのエンティティ マージ コードは通常の状況で見つかると思います。誰が問題が何であるか教えてもらえますか? ありがとう