inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 데이터 JPA

새로운 엔티티를 구별하는 방법

안녕하세요. 야생학습을 하다 궁금한 점이 있어서 질문을 남겨요!

해결된 질문

310

김선동

작성한 질문수 7

2

Note라는 엔티티와 Tag라는 Entity가 있는데 서로 M:N 구조여서 매핑 테이블을 사이에 두고 쪼개주었습니다.

그런데 Note를 save할 때, Tag가 기존에 있던 태그라면 매핑 테이블에만 정보를 추가해주고, 아니라면 Tag 테이블에 추가되는 식으로 구현을 하고 싶습니다.

for (String tagName : tags) {
Optional<Tag> optionalTag = tagRepository.findTagByTagName(tagName);
Tag tag = optionalTag.orElseGet(() ->
Tag.builder()
.tagName(tagName)
.activated(true)
.build()
);
NoteTag noteTag = NoteTag.builder()
.tag(tag)
.note(note)
.build();
note.getNoteTags().add(noteTag);
}
noteRepository.save(note);

이런식으로 구현을 했는데, 생각을 해보니까 태그의 개수가 많을 경우 조회를 많이하게 될 것 같더라고요.

어떻게 해결을 해야 한 번만 조회를 해오도록 할 수 있을까요?

강의를 다 보질 않아서 혹시 강의로 해설이 된 내용이 있다면 그 부분을 찾아서 보겠습니다. 흑흑...

spring-boot JPA spring java

답변 2

3

김선동

와 감사합니다! inQuery를 생각만 해보고 해보지를 않았네요!

빠른 답변 감사합니다! 최고에요!👍

3

김영한

안녕하세요. 선동님 열심히 하고 계시군요^^

처음 조회할 때 tagName을 하나하나 조회하는 것이 아니라 tagNames로 한번에 모든 테그를 조회하는 방식으로 처리하면 됩니다.

IN 쿼리를 활용하는 것이지요. 그러면 쿼리 1번으로 해결할 수 있습니다^^

참고로 활용2편에서 비슷한 최적화 방법들을 학습하실 수 있습니다.

감사합니다.

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

66

1

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

103

3

MemberRepository 구현체

0

56

1

pdf 표현 질문드립니다.

0

60

1

로그가 남지 않는 문제.

0

79

1

테스트 라이브러리가 강의는 junit4가 맞나요??

0

68

2

pdf 파일과 차이점이 있는 것같은데 문제 없나요?

0

69

2

@PrePersist, @PreUpdate 호출 시점 질문드립니다.

0

91

2

Sort 인터페이스는 잘 사용 안하나요?

0

51

1

스캔대상 질문드립니다.

0

45

1

하이버네이트6에서의 최적화에 이은 질문

0

82

1

save() vs saveAndFlush DB 통신 횟수

0

51

1

순수 JPA 리포지토리 코드 수정부분

0

85

2

bulk연산 후 flush하는 이유를 모르겠어요

0

149

3

bulk insert 질문입니다.

0

174

2

교만했던 것 같아요.

0

145

1

RESTful 강의는 안하시는 건지 궁금합니다.

0

144

2

동적 테이블에 대한 질문

0

85

1

영속성 전이와 연관관계

0

130

2

강의 10:25 질문

0

72

1

단건 update 질문

0

94

2

엔티티 와 도메인의 경계

0

126

1

UsernameOnlyDto 타입 type mismatch 오류

0

119

1

Projection 개념과 데이터 전달과정에 대해 질문 있습니다.

0

135

1