프로젝트 와사비는 WiSoft 연구실의 기술 블로그를 제작하는 프로젝트이다.
요구사항에는 게시글에는 여러 사진이 포함될 수 있다
가 존재하며, 아래와 같이 코드를 작성 할 수 있다.
BoardService
@Transactional
public WriteBoardResponse writeBoard(final WriteBoardRequest request) {
...
final Board board = ... //게시글 생성 코드
**boardRepository.save(board); //게시글 저장**
final String[] images = request.imageUrls();
if (images != null) {
Arrays.stream(images)
.forEach(image -> {
final BoardImage boardImage
= BoardImage.createBoardImage(image, board);
**boardImageRepository.save(boardImage); //게시글 이미지 저장**
});
}
return boardMapper.entityToWriteBoardResponse(board);
}
현재 게시글 저장
& 게시글 이미지 저장
로직이 각각 호출되는 상황이다.
→ 이를 하나로 합칠 수는 없을까? ex) 게시글이 저장되면.. 게시글 이미지가 저장되도록..
Board.java : cascade 설정 변경
@Entity
public class Board {
...
@OneToMany(mappedBy = "board", **cascade = CascadeType.PERSIST**)
private Set<BoardImage> boardImages = new HashSet<>();
}
수정된 BoardService
@Transactional
public WriteBoardResponse writeBoard(final WriteBoardRequest request) {
final Board board = ... // 게시글 생성 코드
boardRepository.save(board); //게시글 저장
saveImages(board, request); //이미지 저장
return boardMapper.entityToWriteBoardResponse(board);
}
private void saveImages(final Board board, final WriteBoardRequest request) {
final String[] images = request.imageUrls();
if (images != null) {
Arrays.stream(images) //매핑 후 저장 로직을 호출하지 않음.
.map(image -> BoardImage.createBoardImage(image, board))
.toList();
}
}