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에서 하던 방식으로 처리 했습니다.)
'spring > JPA' 카테고리의 다른 글
이클립스 spring-boot queryDsl gradle 설정 (0) | 2022.03.04 |
---|---|
SPRING-DATA-JPA nativeQuery true에서 result처리 (0) | 2022.02.07 |
JPA-DATA에서 @Query-Map을 이용해서 데이터를 가지고 오는 경우 (0) | 2021.07.27 |
JPA-DATA 한 컬럼만 가지고 오기-nativeQuery 옵션 (0) | 2021.07.27 |
jpa-data에서 테이블을 oracle의 start with 처럼 재귀적으로 호출 하기 위해 self join 하는 경우 (0) | 2021.06.11 |