반응형
아래 에러는 JPA 사용시 Entity 들간 매핑시 Cascadetype 으로 인하여 발생한 에러이다.
PersistentObjectException: detached entity passed to persist
해당 엔티티 관계는 아래와 같다 (에러발생 엔티티들의 관계 )
@Entity
@Table(name="parent")
class Parent{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
}
@Entity
@Table(name="child")
class Parent{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Parent parent;
}
CascadeType의 종류에는 다음과 같은 것들이 있다.
- CascadeType.RESIST – 엔티티를 생성하고, 연관 엔티티를 추가하였을 때 persist() 를 수행하면 연관 엔티티도 함께 persist()가 수행된다. 만약 연관 엔티티가 DB에 등록된 키값을 가지고 있다면 detached entity passed to persist Exception이 발생한다.
- CascadeType.MERGE – 트랜잭션이 종료되고 detach 상태에서 연관 엔티티를 추가하거나 변경된 이후에 부모 엔티티가 merge()를 수행하게 되면 변경사항이 적용된다.(연관 엔티티의 추가 및 수정 모두 반영됨)
- CascadeType.REMOVE – 삭제 시 연관된 엔티티도 같이 삭제됨
- CascadeType.DETACH – 부모 엔티티가 detach()를 수행하게 되면, 연관된 엔티티도 detach() 상태가 되어 변경사항이 반영되지 않는다.
- CascadeType.ALL – 모든 Cascade 적용
해결 방법:
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)private Parent parent;
반응형
'SpringBoot' 카테고리의 다른 글
스프링에서 객체를 리턴할때 null 값인 필드값을 제외 하고 싶을 경우 (0) | 2017.06.23 |
---|---|
Spirng Vaadin Helloworld (0) | 2017.06.21 |
Spring profile 적용 (0) | 2017.06.09 |
Java8 Stream 사용 (0) | 2017.05.24 |
Java8 stream - list compare (0) | 2017.03.27 |