미리 작성된 ERD를 바탕으로 도메인 생성
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Todo extends BaseEntity {
@Id @GeneratedValue
private Long seq;
@Builder
public Todo(String name, String content, TodoStatus status, Integer predictedPomo, Integer realPomo, WorkProficiency workProficiency, WorkType workType, WorkImportance workImportance) {
this.name = name;
this.content = content;
this.status = status;
this.predictedPomo = predictedPomo;
this.realPomo = realPomo;
this.workProficiency = workProficiency;
this.workType = workType;
this.workImportance = workImportance;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="group_seq")
private Group group;
private String name, content;
private TodoStatus status;
private Integer predictedPomo, realPomo;
private WorkProficiency workProficiency;
private WorkType workType;
private WorkImportance workImportance;
}
Todo는 Group과 단방향 N:1 관계를 가지고 있음
- ManyToOne
- 다대일 관계를 나타내는 매핑정보
- fetch = fetchType.LAZY
- ToDo를 조회할 시, Group을 조회하는 쿼리가 생성되지 않고, 실제로 Group을 사용하는 시점에서 Group을 조회하는 쿼리가 나감 → Proxy로 조회
- JoinColumn(name=”team_seq”)
- 매핑할 외래키의 이름을 명시하여 생성
- More: https://private-space.tistory.com/87
public interface TodoRepository extends JpaRepository<Todo, Long> {}
JPARepository를 상속 받는 interface생성
- JPARepository
- CRUD 메소드를 제공
- 메소드 명명규칙에 따라 메소드 이름을 지어주면, JPA가 이름을 분석해 적절한 JPQL 실행
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class TodoRepositoryTest {
@Autowired
private TodoRepository todoRepository;
@Test
void testCreateTodo() {
// given
Todo todo = Todo.builder()
.name("할일")
.content("내용")
.predictedPomo(1)
.realPomo(1)
.status(TodoStatus.TODO)
.workImportance(WorkImportance.LOWER)
.workProficiency(WorkProficiency.ADVANCED)
.build();
// when
Todo savedTodo = todoRepository.save(todo);
// then
assertThat(savedTodo.getName()).isEqualTo("할일");
assertThat(savedTodo.getContent()).isEqualTo("내용");
assertThat(savedTodo.getPredictedPomo()).isEqualTo(1);
assertThat(savedTodo.getRealPomo()).isEqualTo(1);
assertThat(savedTodo.getStatus()).isEqualTo(TodoStatus.TODO);
assertThat(savedTodo.getWorkImportance()).isEqualTo(WorkImportance.LOWER);
assertThat(savedTodo.getWorkProficiency()).isEqualTo(WorkProficiency.ADVANCED);
}
}