JPA에서 findById, findByName에서 궁금한게있습니다.
1215
작성한 질문수 4
package hello.hellospring.repository; import hello.hellospring.domain.Member; import javax.persistence.EntityManager; import java.util.List; import java.util.Optional; public class JpaMemberRepository implements MemberRepository { private final EntityManager em; // build.gradle에서 data-jpa를 등록함 // 스프링부트가 자동으로 EntityManager 만들어줌 public JpaMemberRepository(EntityManager em) { this.em = em; } // 저장, 조회, 업데이트는 쿼리 짤 필요 없음 @Override public Member save(Member member) { em.persist(member); // persist=영구저장-> setId등 모든것을 해줌 return member; } @Override public Optional findById(Long id) { Member member = em.find(Member.class, id); return Optional.ofNullable(member); } // 리스트로 탐색 시 @Override public Optional findByName(String name) { List result = em.createQuery("select m from Member m where m.name = :name", Member.class) .setParameter("name", name) .getResultList(); return result.stream().findAny(); } @Override public List findAll() { // 객체를 대상으로 쿼리를 날림 -> entity 자체를 select하는 것임 List result = em.createQuery("select m from Member m", Member.class) .getResultList(); return result; // return em.createQuery("select m from Member m", Member.class) // .getResultList(); } }
여기에서 findById는 sql없이 찾을 수 있는데 findByName은 쿼리를 작성해주는데, 이유가 어떤건가요?
혹시 id의 경우 제가 db에 넣는게아니라 컴퓨터에서 직접 넣어주는거고 name은 제가 입력해서 db에 넣기 때문인가요?
그리고 findByName에서 sql을 이용해서 특정 데이터를 뽑아내면 list로 나오는데, findById의 경우는 리스트로 나오는게 아닌가요,,?
답변 1
1
entity의 @id로 매칭시킨 필드가 검색되는 것이지요.
당연히 결과도 리스트로 받으실 수 있습니다.
findByName 의경우 메서드 명명규칙에 따라 작성해주셔야 합니다.
entity에 String name 이런식으로 작성이 되있으시겠죠.
롬보을 쓰실경우
getName 이 작성 된다 했을때 저 Name부분을 findBy뒤에 쓰시면 사용가능합니다.
결과는 물론 list일수도 있구요.
도움이 되었으면 좋겠네요.
..
0
87
2
Unused property.....
0
105
2
project JDK is misconfigured
0
142
2
외부 API의 ID 타입(String/UUID)과 내부 도메인의 ID 타입(Long)이 불일치할 때의 설계 정석
0
86
2
단위/통합 테스트 버전충돌 문제
0
92
2
❗️springboot 4.0.2 버전 aspectj dependency 설정❗️
0
238
1
왜 컨트롤러는 변한게 없는데 새로 만든 html 파일이 뜨나요?
0
106
2
윈도우 build test오류 질문
1
105
2
테스트 관련 공부에 대한 조언을 얻고 싶습니다
0
103
2
테스트 실행 시 에러 질문
0
301
1
name을 통한 비교와 객체를 통한 비교
0
77
1
빌드 후 libs 없음
1
134
1
윈도우 gradlew.bat 에러
0
171
1
@PostMapping("/members/new")가 동작하지 않습니다
0
91
1
java static class와 kotlin class
0
83
1
스프링 DB연결
0
129
1
소요 시간
0
89
2
ddl.sql에 빨간 밑줄
1
102
2
welcome page 에러
0
187
3
잘 모르겠습니다.
0
166
2
fail을 똑같이 쳤는데 오류가 발생해요
0
161
2
index.html Welcome page
0
128
1
프로젝트 gradle-groovy ?
0
385
1
테스트코드 메서드명 한글
0
207
2





