1. 문제 상황
프로젝트에서 새로운 User을 생성하기 위해 회원가입을 진행하던 도중 다음과 같은 에러가 발생했다.
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance -
save the transient instance before flushing : dev.sma.basic.jpa.entity.UserEntity.residence ->
dev.sma.basic.jpa.entity.AreaEntity
2. 원인
영속성에 의해 발생한 오류라고 한다.
FK로 사용되는 칼럼에 데이터가 없는 상태에서 데이터를 넣으면 발생한다.
현재 나의 프로젝트 기준으로 UserEntity가 AreaEntity와 @ManyToOne 관계를 가지고 있다.
AreaEntity로 생성된 'area' 테이블에 데이터를 넣지않고 User 데이터를 넣으려고 하니 FK인 area_id가 없기 때문에 발생했다.
3. 해결
@ManytoOne, @OnetoMany 어노테이션에 cascade 옵션을 추가해주면 된다.
cascade = CascadeType.ALL
cascade 옵션을 설정해줌으로써 parent에 데이터를 저장할 때 Child 데이터를 저장하도록 hibernate에 알려준다.
나의 프로젝트에서는 cacscade 옵션에 의해 User 데이터를 저장할 때 Area 데아터를 저장하도록 해준다.
@ManyToOne(
targetEntity = AreaEntity.class,
fetch = FetchType.LAZY,
cascade = CascadeType.ALL
)
@JoinColumn(name = "area_id")
private AreaEntity residence;
4. 참고
'Trouble Shooting' 카테고리의 다른 글
리소스를 HTTPS 프로토콜 호출로 인한 ERR_SSL_PROTOCOL_ERROR 발생, Mixed Content (0) | 2024.04.17 |
---|---|
Spring Boot Jpa IllegalArgumentException 에러 (2) | 2022.05.18 |
AWS EC2 Gradle 배포 시 멈춤현상 (0) | 2022.05.04 |
QLRM 네이티브 쿼리 DTO type 오류 (0) | 2022.04.14 |
Spring boot와 h2 Database 연동 오류발생 (0) | 2022.04.10 |