728x90
에러
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : ...
원인
JPA 연관 관계 테스트 중에 발생했다.
FK 로 사용되는 컬럼값이 없는 상태에서 데이터를 넣으려다 발생한 에러이며
영속성때문에 나는 오류다. FK로 쓰는 객체가 아직 저장이 안되서 오류가 난다고 한다.
객체간 @OneToMany, @ManyToOne같은걸 쓸 때 날 수 있다.
예를 들어 Member (email, name) 이라는 테이블과 Board (id, title, member id) 라는 테이블 관계가 있을 때,
Member 데이터를 넣지 않고 Board 데이터를 넣으려고 하면 member id 값이 없어서 에러가 발생한다.
해결
join하는쪽에 cascade를 설정해준다.
cascade = CascadeType.ALL
@ManyToOne(cascade = CascadeType.ALL)
private Member memberId;
cascade 는 "영속성 전이" 라고 하는 개념인데 특정 엔티티를 영속화 할 때 연관된 엔티티도 함께 영속화 한다. 저장할 때만 사용하려면 cascade = CascadeType.PERSIST 로 설정해주면 되며, 전체 적용인 CascadeType.ALL 로 설정해도 된다.
Member 삭제 시 해당 member가 쓴 게시글도 함께 지워주려고 할 때도 사용된다.
728x90
'🍃 𝗦𝗽𝗿𝗶𝗻𝗴 𝗕𝗼𝗼𝘁' 카테고리의 다른 글
[Spring] Gradle 버전 확인 방법 (0) | 2022.09.15 |
---|---|
[Spring Jpa] nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist (0) | 2022.09.06 |
[Spring] DTO, VO, Model 의 차이 (0) | 2022.09.06 |
[Spring Jpa] @CreatedDate, @LastModifiedDate null (0) | 2022.09.05 |
No identifier specified for entity 문제 해결 방법 (0) | 2022.08.31 |
댓글