📌 JPA에서 단 건 (findOne)이 아닌 List를 조회해야될 경우
- JPQL 쿼리를 작성해줘야된다.
- 예시
em.createQuery("select i from Item i", Item.class).getResultList();
- getResultList(); 호출전에 페이징 쿼리
(.setFirstResult()
.setMaxResults()
) 등 작성 가능하다.
@Transactional
- 읽기 (조회) 전용 일때는
@Transactional (readOnly = true)
사용 권장
- 영속성 컨텍스트를 플러시 하지 않음으로 성능이 더 좋아진다.
- 쓰기 일때는
@Transactional
default로 사용
- 쓰기 일때 readOnly = true를 하게되면 데이터 변경이 안된다.
📌 생성자 주입 (Injection)
- 1단계 (필드 주입) (테스트 코드를 작성 X)
@Autowired
private MemberRepository memberRepository;
- 2단계 (Setter 주입) (치명적 단점 set호출해 변경이 가능함)
private MemberRepository memberRepository;
@Autowired
public void setMemberRepository (MemberRepository memberRepository){
this.memberRepository = memberRepository;
}
private MemberRepository memberRepository;
@Autowired
public MemberService (MemberRepository memberRepository){
this.memberRepository = memberRepository;
}
- 📍 최종
(@RequiredArgsConstructor 사용) (final이 있는 필드를 가지고 생성자를 만들어준다.)
@RequiredArgsConstructor
private final MemberRepository memberRepository;