다시 코드를 리팩터링 하는 중. 어제 쓴 것에 기반으로 조금 리팩토링하는데 확실히 달라진게 있는 듯? 하다. 단점은 시간이 다소 걸린다는 점.
여태까지 모델(엔터티)에 배열 넣는 법을 글을 썼는데 다시 또 바꿔쓰려고 한다.
고민
https://onulmansanda.tistory.com/202
1. @ManyToOne 쓰는 법
https://onulmansanda.tistory.com/204
2. Dto로 변환 한 뒤 다시 넣어주기
1. controller 에서
List<StudyDto> StudyDtos =
studyService.list(page)
.stream()
.map(study -> study.toDto(studyService.list(study.getId())))
.collect(Collectors.toList());
2. service 에서
public Page<Study> list(Integer page) {
Sort sort = Sort.by("createdAt").descending();
pageable = PageRequest.of(page - 1, 4, sort);
return studyRepository.findAll(pageable);
}
3. @ElementCollection 사용하기
@ElementCollection
private List<String> hashTags;
엔터티에서 사용하고자하는 속성 값 위에 저렇게 붙여주면 List를 넣을 수 없다는 오류를 막을 수 있다.
데이터베이스에서는 아래처럼 인식된다.
특징은 @ElementCollection 을 사용한 것은 edit 버튼이 없다.
우여곡절끝에... 3가지 방법으로 배열을 넣었다.
저렇게 다양하게 짜다보니 엔터티 모델을 만들면서 속성들을 어떻게 처리해줘야할까를 고민하게 되는데 결국 그럴수록 객체지향적 사고를 해야하고 설계의 중요성이 드러난다.
일단은 List<String> 형태로 사용하면서 Study라는 (스터디 모임의 객체 모델)의 해쉬태그를 사용하면서 확장성이 보일때 갑객체로 빼줄 예정이다.
'개발 관련 학습 및 문제해결' 카테고리의 다른 글
LDD(Logic Driven Development)??[20221111-TIL] (0) | 2022.11.11 |
---|---|
CKeditor 리액트에서 테스트 코드짜기[20221110-TIL] (0) | 2022.11.10 |
백엔드 Layered Architecture 구조와 모델 설정시 유의할 점[20221108-TIL] (0) | 2022.11.08 |
효율적으로 학습을 하자[메가테라 19주차 주간회고] (0) | 2022.11.07 |
개발하기전 설계하는 법[20221107-TIL] (0) | 2022.11.07 |
댓글