로또-TDD 리뷰
부가 설명
entity에 ID가 있으면 persist가 아닌 merge 방식으로 작동한다.
repository는 DAO보다는 collection에 가까운 개념이다.
(why? collections에서 내부의 값을 꺼낸 다음에 변경하면 다시 add나 put을 하시나요?? -> No)
repository에서도 다시 add나 put하지 않기 때문에 collection에 더 가까운 개념
@JoinColumn
을 @OneToMany
에서 사용하면 관계테이블을 쓰지 않겠다고 알려줌
@OneToOne
또는 @ManyToOne
처럼 뒤에 One이 나오는 경우 @JoinColumn
은 컬럼이름 역할
뒤에 Many가 오는 경우 @JoinColumn
이 일을 하기 시작함
보통 다대다 연관 관계는 일대다 관계와 다대일 관계로 풀어내는 연결테이블을 사용
1단계
https://github.com/next-step/jwp-qna/pull/224
리뷰사항
1.@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
를 사용하면 테스트 DB가 아닌 실제 DB 사용(@ActiveProfiles
을 설정하여 테스트용 DB를 바라보게 설정 가능)
@DisplayName
을 활용하여 설명을 추가2단계
https://github.com/next-step/jwp-qna/pull/331
리뷰사항
- 요구사항에 맞게
@Lob
사용 - 항상 같이 조회하는 경우가 아니라면 지연로딩 속성 추가(
@OneToMan
y는 LAZY가 디폴트이지만@ManyToOne
는 아니기 때문입니다.) toString()
로 객체를 출력할때 양방향 연관관계일 경우 순환참조가 일어날 수 있기 때문에 주의 필요@Where
를 활용하면 삭제되지 않은 것만 가지고 올 수 있다 (@Where(clause = "deleted = false")
)- Entity 클래스의
equals()
는 id 값으로 비교하는게 좋을 수 있다. - 정적 팩토리 메소드를 만들어보면 인자수도 줄면서 코드의 가독성 높일 수 있다.
- 분리했을때 이점은 객체 내에서 스스로 상태와 관련된 검증이나 로직을 처리할 수 있다
- 순환참조를 예방하는 다양한 방법이 있지만 실무에서는 주로 DTO를 넘기도록 사용
- 리턴이 없는 메소드는 테스트 하기 힘들뿐더러 지금같은 경우 예외발생(일종의 리턴)에 대한 테스트를 하는 것이 더 좋다
assertDoesNotThrow(() -> answer.validateOwner(UserTest.JAVAJIGI));
- 관련있는 엔티티끼리 패키지를 묶음
정리
- jpa에 대해 모르는 것이 많아 어려웠다.
- 리뷰를 상세하게 해주셔서 많은 것을 알 수 있었다.
참고
This post is licensed under CC BY 4.0 by the author.