Repository
- @Repository : component scan을 통해 자동으로 spring bean으로 관리
- @PersistenceContext : EntityManager를 만들어서 Injection함
JPQL은 SQL과 약간 다름
SQL은 테이블을 대상으로 쿼리 작성
JPQL은 Entity 객체를 대상으로 쿼리 작성@PersistenceContext는 Lombok을 사용한다면 RequiredArgsConstructor로 대체 가능
단, 필드는 반드시 final로 선언할 것
Service
@Transactional : JPA는 모든 비즈니스 로직이 Transaction 안에서 돌아야 함
javax 보다는 spring이 제공하는 것을 사용하는 것을 권장
- 읽기에는 @Transactional(readOnly = true)
- 쓰기에는 @Transactional의 readOnly를 true로 줄 경우 쓰기가 되지 않음
@Autowired
- 단점 : 필드에 직접 선언하면 해당 필드는 변경할 수가 없음
- 해결 :
- 생성자 Injection을 하면 됨
- Lombok에서 제공하는 @RequiredArgsConstructor를 사용하면 됨
final로 선언되어있는 필드를 모두 Injection 해줌