JPA

[JPA] 에러 TransientPropertyValueException: object references an unsaved transient instance

수수한개발자 2022. 8. 11.
728x90

TransientPropertyValueException: object references an unsaved transient instance 

위와 같은 에러가 콘솔에 찍혔다.

 

 

문제

@OneToOne
@JoinColumn(name = "group_upload_file_id")
private GroupUploadFile groupUploadFile;

위와 같이 연관관계를 맺어놓은 상태였다. 그룹을 만들고 그룹의 배경 사진을 업로드하는 테이블을 만들어 연관관계를 맺어 따로 관리를 하려고 하였다.

 

근데 에러가 나서 구글링을 해서 찾아보았다.

 

 

 

원인 

영속성때문에 나는 오류였다. FK로 사용되는 럼 값이 없는 상태에서 데이터를 넣으려다 발생한 에러라고 한다..

나 같은 경우에는 그룹에 대한 정보를 받아오는데 파일에 대한 정보도 받아와서 저장하려는데 그룹 업로드 파일 테이블에 데이터가 없어서 에러가 나는 것이었다.

 

해결방법

연관 관계 매핑해줄 때 사용하는 

@ManyToOne, @OneToOne, @OneToMany 어노테이션에 cascade 옵션을 설정해줍니다.

cascade 는 "영속성 전이" 라고 하는 개념인데 특정 엔티티를 영속화 할 때 연관된 엔티티도 함께 영속화 합니다.

저장할 때만 사용하려면 cascade = CascadeType.PERSIST 로 설정해주면 되며, 전체 적용인 CascadeType.ALL 로 설정해도 됩니다.

그럼 자식 데이터를 저장하기 전에 부모 값부터 저장합니다.

 

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "group_upload_file_id")
private GroupUploadFile groupUploadFile;

그룹이 삭제되면 그룹업로드파일도 있을 필요가 없으니깐 CascadeType.ALL로 해주었다.

728x90

댓글