🍃 𝗦𝗽𝗿𝗶𝗻𝗴 𝗕𝗼𝗼𝘁
[Spring Jpa] TransientPropertyValueException: object references an unsaved transient instance
비타민찌
2022. 9. 6. 20:05
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