반응형
1. 문제
JPA를 사용해 객체간 @OneToOne 관계를 설정한뒤 Repository의 save를 호출할때 아래와 같은 에러가 발생할 수 있다.
2. 원인
이러한 상황은 주로 부모객체에서 자식객체를 한번에 저장하려고할때 발생하는 것으로, 자식 객체가 아직 데이터베이스에 저장되지 않았기 떄문이다.
사용한 클래스는 아래와 같다. Mission가 부모 MissionRule가 자식이다.
@Getter
@NoArgsConstructor
@Entity
public class Mission extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@OneToOne
@JoinColumn(name = "MISSION_RULE_ID")
private MissionRule missionRule;
@Builder
public Mission(MissionRule missionRule){
this.missionRule = missionRule;
}
}
3. 해결
부모객체에 선언한 자식객체에 CascadeType.ALL을 선언한다. 이를 통해 영속성 전이가 발생해 부모객체를 저장할때 자식객체도 함께 저장할 수 있다.
@Getter
@NoArgsConstructor
@Entity
public class Mission extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "MISSION_RULE_ID")
private MissionRule missionRule;
@Builder
public Mission(MissionRule missionRule){
this.missionRule = missionRule;
}
}
추천서적
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
반응형
'ERROR' 카테고리의 다른 글
[ERROR] Failed to start The nginx HTTP and reverse proxy server (0) | 2020.09.15 |
---|---|
[ERROR] JUnit @DataJpaTest NoSuchBeanDefinitionException (0) | 2020.09.15 |
[ERROR] IntelliJ JUnit Cannot resolve symbol (0) | 2020.09.15 |
[ERROR] AmazonCloudFormationException: Stack for i-XXX does not exist (0) | 2020.09.15 |
[ERROR] AWS EC2 No package npm available (0) | 2020.09.14 |