Cascade(2)
-
JPA 에러: save the transient instance before flushing
개인 프로젝트의 테스트 코드에서 위와 같은 에러가 발생했다. 오브젝트가 저장되지 않은 인스턴스를 참조하고 있다는 메시지로 보인다. 검색 결과 FK 로 사용되는 컬럼에 값이 없는 상태에서 데이터를 넣으려다 발생한 에러인 듯 싶다. 예를 들어 멤버(id, name, team_id), 팀(id, name)의 테이블에서 팀의 데이터가 없는 채로 멤버의 데이터를 넣으려고 하면 위의 에러가 발생한다는 뜻이다. 이 경우 멤버를 영속상태로 만들때 팀도 자동으로 영속화해주는 Cascade 옵션을 사용해 해결이 가능하다. 상품(Item) 1 : N ItemCategory N : 1 카테고리(Category) 의 테이블에서 @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType..
2022.06.07 -
영속성 전이: CASCADE, 고아 객체
• 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때! • 예: 부모 엔티티를 저장할 때 자식 엔티티도 자동으로 em.persist(). • 영속성 전이는 연관관계를 매핑하는 것과 아무 관련이 없음 • 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 편리함을 제공할 뿐이다. CASCADE의 종류 • ALL: 모두 적용 • PERSIST: 영속 • REMOVE: 삭제 고아객체(orphanRemovel) 만약 고아 객체(orphanRemovel = true)로 설정되었다면, 부모 엔티티와 연관관계가 끊어지면 자식 엔티티가 자동으로 삭제된다. 예를들어, Listlist에서 remove(0)을 실행하면 index가 0번인 Child 엔티티에 DELETE 쿼리가 날라간다...
2022.03.31