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
'JPA' 카테고리의 다른 글
JPA 에서 Where In 절 대신 array_contains를 사용하는 이유 (2) | 2023.10.17 |
---|---|
[JPA] @ManyToMany, 다대다 관계 풀기, 연관 관계 주인 (0) | 2022.08.19 |
find vs get (네이밍 컨벤션과 JPA에서의 내부 동작 차이) (0) | 2022.08.03 |
[JPA] 값 타입 (0) | 2022.06.19 |
[JPA] 프록시와 연관 관계 관리 (0) | 2022.06.19 |
댓글