persist
를 하면 객체 저장 이후 자식측 데이터에서 parent_id
, map_key
를 update하는 현상이 발생한다.public class Parent { // .... @OneToMany(cascade = {CascadeType.ALL}) @JoinColumn(name = "parent_id", nullable = false) @MapKeyColumn(name = "map_key") private Map<String, Child> children; // children 테이블에 parent_id, map_key 컬럼 존재 } // 이 상황에서 Parent 객체를 children 값까지 다 채워서 persist 하면 insert 후에 update 동반 발생 // 이미 insert 상황에서 children 테이블의 parent_id, map_key의 채워진 상황. update children set parent_id=?, map_key=? where child_id=?
@JoinColumn
, @MapKeyColumn
을 updatable=false
로 지정하면 업데이트 안 일어남@OneToMany(cascade = {CascadeType.ALL}) @JoinColumn(name = "parent_id", nullable = false, updatable=false) @MapKeyColumn(name = "map_key", updatable=false) private Map<String, Child> children; // 이후 update 안 일어남.