2-12 참고하여 PostService → PostRepository 옮기기
return postRepository.findAll().stream().map(PostResponseDto::new).toList();
postRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("선택한 게시글은 존재하지 않습니다"));
IllegalArgumentException
→ 검색해보기
Optional 타입으로 받아야 하는데 한번에 Post로 뽑기 위해 쓰인 것!?
→ Optional에 .orElseThrow를 부르면 post가 null 값이 아니라면 null을 체크
→ findById 했는데 아무것도 없다면(데이터베이스에 아무것도 없다면) null 반환
→ null이 되면 Throw를 함 (new IllegalArgumentException으로 정의해준 “ “ 값을 출력)
Optional 추가 공부 필요
update
- 영속성 컨텍스트 유지를 위해
- 변경감지를 위해 트랜잭셔널 어노테이션을 걸어줘야 함
- SimpleJpaRepository에서 findById의 @오버라이딩 확인(가장 상단에 트랜잭셔널이 걸려 있음) → Service의 update에도 @트랜잭셔널 걸어줘야 함
- 부모 메서드에 트랜잭셔널 확인 (없으면 걸어야 한다…?!)
→ 트랜잭션 전파! (영속성 컨텍스트 유지와 변경 감지 이루어지기 위해)
// JPA 구현체인 hibernate
implementation 'org.hibernate:hibernate-core:6.1.7.Final'
// MySQL
implementation 'mysql:mysql-connector-java:8.0.28'
@GeneratedValue(strategy = GenerationType.IDENTITY) 알아보기…
@Column(name = "title", nullable = false, unique = false);, @GeneratedValue(strategy = GenerationType.IDENTITY); 같은 어노테이션이 왜 빨간색 줄이 뜰까!?! 답답해!
@Id와 @GeneratedValue의 위치는?
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
implements : 인터페이스와 클래스 간에 사용
extends(상속) : 인터페이스와 인터페이스, 클래스와 클래스 간에 사용
implements와 extends의 다른점 찾아보기
왜 Entity를 직접 return하지 않나요?! & 왜 Entity가 아닌 Dto로 반환 해야하나요?
abstract??
public class Post extends Timestamped