공부 흔적남기기

Spring JPA를 이용한 간단한 CRUD를 하면서 실수한 부분들 본문

web study/Spring

Spring JPA를 이용한 간단한 CRUD를 하면서 실수한 부분들

65살까지 코딩 2022. 1. 21. 18:34
728x90
반응형

1.Domain에 @Entity를 붙이지 않아서 30분동안 헤맸다. -> JPA에 DB를 넣기위해서 붙여야하는데 안붙였다.다음부터는 무조건 먼저 붙일 듯 ^^

2.Controller의 위치가 @ComponentScan이 있는 즉 @SpringBootApplication보다 같거나 아래 경로에 있어야 하는데 윗 경로로 만들었다가 20분정도 날린 것 같다. -> 경로 확인 잘하자! ^^ //+) 경로 다시 한번 확인해보기 이게 문제가 아니였던 것 같음.

3.Service에서 db처리하는 메소드 위에 @Transational을 붙이지 않아서 헤맸다. -> 이것도 30분은 헤맨듯 ^^ 덕분에 @Transational공부도하고 좋았다 ^^

4.URL 경로 오타나가지고 계속 404가 나왔다. -> ^^ 오타 ^^

5.Domain에 값들에 @ID와 @Column을 붙이지 않아서 5분정도 헤멨다. -> ^^ Nullable과 GeneratedValue(Stragey =GenerationType.Auto) ( Auto Increment기능) 이것들도 빼먹지말자

6. @RequiredArgsConstructor 와 @NoArgsConstructor 차이를 알 수 있어서 좋았다.

7. JPA는 update기능을 지원하지 않아서 따로 만들어 주어야 한다.

8. 생성 수정 시간을 자동으로 반영하게 해주는 Class Domain에 Extends로 붙여주면된다.

@MappedSuperclass // 상속했을 때, 컬럼으로 인식하게 합니다.
@EntityListeners(AuditingEntityListener.class) // 생성/수정 시간을 자동으로 반영하도록 설정
public class Timestamped {

    @CreatedDate // 생성일자임을 나타냅니다.
    private LocalDateTime createdAt;

    @LastModifiedDate // 마지막 수정일자임을 나타냅니다.
    private LocalDateTime modifiedAt;
}

9. Controller에서 클라이언트에게 받은 값은 인자앞에 @RequestBody를 붙여주고 Url로 받은 값은 앞에 @PathVariable을 붙여준다!

10. 신기한게 update를 할때 update할 객체를 db에서 찾아서 새로운 객체에 넣어준다음에 그 새로운 객체의 값을 바꾸면 update할 객체의 값도 바뀌었다. 신기하다 @Transection안에서 이루어져서 그런건가? 질문해야겠다.

 @Transactional
    public Long update(Long id, PersonRequestDto personRequestDto){
        Person person = personRepository.findById(id).orElseThrow(
                ()-> new IllegalArgumentException("해당 정보가 존재하지 않습니다.")
        );
        person.update(personRequestDto);
        return id;
    }

11.Dto에 대해 처음 알게되었는데 좋은 개념인 것 같다. Domain에서 AI값을 제외한 Nullalbe=false 값들을 가지고 있는 class로 client에게 객체를 받을 때 Dto를 통해서 받는다. Domain에서 Dto를 통한 생성자나 update함수를 만들어 주면된다!

728x90
반응형