spring/JPA

JPA-DATA @ManyToOne 삭제시 부모참조(연결 컬럼 UPDATE) 문제

질주하는구 2021. 7. 27. 14:39

JPA-DATA @ManyToOne 삭제시 부모참조(연결 컬럼 UPDATE) 문제가 생길시

예전 HIBERNATE에서 하던 방식대로 참조 하는 부모객체의 정보를 NULL로 만들어서 연결을 끊어주고 DELETE하는 방식을 사용해야 합니다.

BbsSet<->BbsItem 2개의 테이블이 ManyToOne으로 엮여 있는 경우

@JsonIgnore
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "BBS_SET_SEQ")
private List<BbsItem> bbsItemList = new ArrayList<BbsItem>();

@JsonIgnore
@ManyToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
@JoinColumn(name = "BBS_SET_SEQ", insertable=false, updatable=false)
private BbsSet bbsSet;

BbsItem 삭제시 아래와 같이 UPDATE문을 실행 하게 됩니다.

UPDATE T_BBS_ITEM SET BBS_SET_SEQ=null WHERE BBS_ITEM_SEQ=?

BBS_SET_SEQ 은 FK 키로 잡혀 있기 때문에 NOT NULL이여서 에러가 발생되고 삭제에 실패 하게 됩니다.
이 경우 BbsItem의 bbsSet 을 bbsSet=null; 로 관계를 끊어주고 delete해야 정상적으로 BbsItem 정보가 삭제 됩니다.
(bulk update 할 수도 있는데 다른 방법이 있을거 같은데 hibernate에서 하던 방식으로 처리 했습니다.)

반응형