양방향 1:N 관계를 가지고 있는경우 OneToMany, ManyToOne을 설정해주면 클래스들간의 관계를 잘 맺어줄 시 JPARepository.save를 부모를 저장할 시 자식들과 부모의 관계가 자동으로 설정되며 자동으로 foreign키가 잘 맵핑된다.
하지만! 단방향 OneToMany의 경우에는 부모 엔터티에 자식을 넣어주고 저장해줘도 자식의 부모를 가리키는 foreign 키가 제대로 맵핑되지 않는다.
단방향 OneToMany일때 제대로 자식의 foreign 키를 맵핑해주기 위해서는 다음과 같이 로직을 작성해야한다.
ArticleDto saveValue = ArticleDto.builder()//부모값 설정
.title(articleVo.getTitle())
.userName(articleVo.getUserName())
.content(articleVo.getContent())
.build();
//부모값 저장 후 저장된 값 반환
ArticleDto temp = articleRepo.save(saveValue);
//반환 받은 값에 담김 부모의 primary key를 자식에게 입력
files.stream().forEach(e->{
try {
fileList.add(ArticleFileDto.builder()
.articleId(temp.getId())
.file(e.getBytes())
.fileName(e.getOriginalFilename())
.uploadDate(LocalDateTime.now())
.build());
} catch (IOException e1) {
String message = e1.getMessage();
System.out.println(e1.getMessage());
e1.printStackTrace();
}
});
//저장
articleFileRepo.saveAll(fileList);
이렇게 단방향 1대N 관계에서는 부모 먼저 저장후 자식의 foreign key 설정을 해줘야 한다.