[Spring] JPA unidirectional OneToMany

Martin the dog·2024년 1월 21일

스프링 복습하기

목록 보기
13/15

양방향 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 설정을 해줘야 한다.

profile
Happy Developer

0개의 댓글