이슈
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing
JPA 연관관계를 이용해 저장하려던 중 위와 같은 오류 발생
원인
연관관계에 놓인 두 엔티티를 저장하려 할때, 부모 엔티티의 FK가 영속되지 않아 발생한 오류
나의 경우 다대다 관계에 대한 테스트중 자식 엔티티를 바라보는 부모 엔티티의 필드 값이 영속 시점에 적절히 저장되지 않아 발생한 이슈
해결
연관관계 엔티티를 함께 저장하기 위해서 Cascade 옵션을 통해 부모 엔티티가 저장될때 자식 엔티티가 함께 저장되도록 처리한다.
@ManyToMany(cascade = CascadeType.MERGE) // 연관관계 어노테이션에 Casecade 옵션을 준다.
@JoinTable(
name = "member_product",
joinColumns = @JoinColumn(name = "memberId"),
inverseJoinColumns = @JoinColumn(name = "productId")
)
private List<ProductEntity> products = new ArrayList<>();
* Cascade는 영속성 전이라는 의미를 가지고 있으며, 부모 엔티티가 변경될 때 연관관계에 놓인 자식 엔티티의 영속성을 어떻게 처리할 것인가를 정의하는 옵션
'Spring' 카테고리의 다른 글
[JPA] 연관관계의 주인 (0) | 2023.09.01 |
---|---|
[Spring] 서비스 운영간 발생한 DB Connection Closed 이슈 (0) | 2023.08.30 |
[Spring] 구글 OAuth2.0 이용 소셜 로그인 구현 (0) | 2023.08.10 |
[JPA]연관관계 - 다대다(N:M) (0) | 2023.08.09 |
[JPA]연관관계 - 일대일 관계 (0) | 2023.07.27 |