優雅な科学技術サマーキャンプの回顧-JPA
https://github.com/etff/jwp-qna/tree/etff
第2の任務はJPAの尊敬を運用することです
指定されたプロジェクトでは、
ドメインに移動します.複雑なオブジェクト間の関係をJPAでマッピングします.
個人的には
orElse(null)
が好きではありません.nullを返すのは良いモードではないからです.今回はコメントでEntityNotFoundExceptionを知りましたエンディングがないことを明確に表現できてよかったと思います.
テスト中に値が入力されているかどうかを確認し、実際のデータベースに値が入力されているかどうかを確認する必要があります.
今回の開発では,階層テストを積極的に用いた.
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class AnswerRepositoryTest {
private User user1 = new User("tester", "password", "tester", "[email protected]");
private Question question1 = new Question("title", "content");
private Answer answer1 = new Answer(user1, question1, "content");
@Nested
@DisplayName("save 메서드는")
class Describe_save {
@Nested
@DisplayName("답변 정보가 주어지면")
class Context_with_answer extends JpaTest {
final Answer expected = answer1;
@Test
@DisplayName("답변을 저장하고, 답변 객체를 리턴한다")
void it_saves_answer_and_returns_answer() {
Answer actual = getAnswerRepository().save(expected);
assertThat(actual).isEqualTo(expected);
}
}
}
}
また、既存のコードでFixtureとして共有されているコードが削除された.テストのために事前に作成しておいたFixtureは便利ですが、後で管理ポイントになります.また,状態共有では副作用を考慮する.今回のタスクでは,静的手法が有用な事例を見つけた.
出しゃばる
public static DeleteHistory ofQuestion(Long contentId, User deletedBy) {
return new DeleteHistory(ContentType.QUESTION, contentId, deletedBy);
}
public static DeleteHistory ofAnswer(Long contentId, User deletedBy) {
return new DeleteHistory(ContentType.ANSWER, contentId, deletedBy);
}
Javaオブジェクト向けタスクを行う際には,一級集合を用い,JPAにも適用した.N:1の関係の集合を1レベルの集合として作成し、論理を分離してコードをきれいにします.
経歴
@Embeddable
public class Answers {
@OneToMany(mappedBy = "question", cascade = CascadeType.ALL)
private List<Answer> answers;
protected Answers() {
this.answers = new ArrayList<>();
}
public DeleteHistories delete(User loginUser) {
DeleteHistories deleteHistories = new DeleteHistories();
for (Answer answer : answers) {
final DeleteHistory deleteHistory = answer.delete(loginUser);
deleteHistories.addHistory(deleteHistory);
}
return deleteHistories;
}
public void add(Answer answer) {
this.answers.add(answer);
}
public List<Answer> getAnswers() {
return new ArrayList<>(answers);
}
}
学識Reference
この問題について(優雅な科学技術サマーキャンプの回顧-JPA), 我々は、より多くの情報をここで見つけました https://velog.io/@etff/우아한테크캠프-회고-JPAテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol