java를 배우지 못하고 혹은 springboot나 jpa에 대해 제대로 배우지 못하고 그냥 개발을 하려고 하니 이것저것 우당탕탕이고 시간도 많이 잡아 먹는다는게 이런거구나를 실시간으로 깨닫는 중입니다.
entity의 칼럼을 "게시글_id"로 잡았는데 이렇게 잡으면 jpa가 못알아 먹는다. 이걸 몰라서 entity 칼럼을 스네이크로 잡았다..ㅎ node.js로 할땐 수업을 들었어서 카멜케이스를 지향하고 스네이크를 지양했는데... 게시글Id로 하면 jpa도 잘 알아먹었을 것을...
게시글을 그저 최신순으로 가져오고 싶었는데 repository에도, 서비스단에서도 jpa문법대로 만들었는데 안먹어서 너무 당황스럽고.. 왜 계속 나는 괄호에 creator_id로 썻는데 자꾸 creator만 찾지? 라거나 아니 왜 creatorId로 했는데 creator를 찾지?가 되는 것이었다. 계속 에러메시지로는 creator가 없는데 너가 찾는데 creator_id냐 라고 물어보기만 하고... 나보고 어쩌라는 건지..
서비스에서 결국은 아래 같이 만들고
List<ArtworkEntity> lastArtworks = artworkRepository.findAllByOrderByArtworkIdDesc();
return artworkMapper.toDtoList(lastArtworks);
리포지토리에서는 이렇게 만들어서 실행시켰다... 감사..
되줘서 감사.. 압도적 감사
"FROM artwork a " +
"ORDER BY a.artwork_id DESC",
nativeQuery = true)
List<ArtworkEntity> findAllByOrderByArtworkIdDesc();
나의 24시간이 들어가 있는 코드였다..
사실 시작은 jpa니까 서비스에서만
List<ArtworkDto> findAllDesc(){
List<ArtworkEntity> lastArtworks = artworkRepository.findAllByOrderByArtworkIdDesc();
return artworkMapper.toDtoList(lastArtworks);
이렇게 만들면 되겠지 하고 호출했는데 다행히 그땐 ? 뭔가 제대로 됐는지? 데이터베이스가 비어있어서 그랬는진 몰라도 [] 얘가 리턴됐었다. 작동이 되는구나 했다.
근데 이게 왠걸? 집에 돌아와서 다시 해보니 500서비스 에러가 떳다
그때 부터 왜? 라는 의문을 새기며 오만걸 다 뒤져봤다.
그래서 찾아보니
List<ArtworkEntity> lastArtworks = artworkRepository.findAll(Sort.by(Sort.Direction.DESC, "artwork_id"));
이런 sort를 이용해서 artwork_id를 심어서 하면 된다길래 서비스단에닥 이 코드를 심었다.
그러나 다시 만난 artwork가 없다. 너가 찾는건 artwork_id니라는 질문..
다시 찾았다. sort를 서비스 단에서 쓰면 리포지토리에서도 코드를 심어야 한다 했다.
List<ArtworkEntity> findAll(Sort sort);
그래서 얘를 심어봤다.
again 아트워크 없음 그대가 찾는게 artwork_id인가?
암만 찾아도 jpa로 desc 를 사용하는건 함수이름을 jpa방식으로 하거나 sort를 사용해서 하거나 였는데... 도대체 왜...? 보통은 entity에 문제라던데 그렇지만 내 entity에는 아주 당연하게 artwork_id가 있었다.
그래서 혹시나 싶어서 컬럼 어노테이션에 name을 심어봤다.
@Id
@Column(nullable = false, name = "artworkId")
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Integer artwork_id;
아주 놀랍도록 효과가 없었다.
알고보니 private Integer artworkId;로 하고 @Column(nullable = false, name = "artwork_id")로 하는게 일반적이고 자바도 동작하는 방식이라고 하더라. 근데 이미 artwork_id로 만들어 놓은게 많아서
그냥 query를 사용하기로 했다. 쿼리는 이미 작동한다는 걸 알고 있었기 때문에(동료가 쓴게 작동한거 봤다.) 그래서 쿼리를 작성하니 동작함. 할레루야.
아.. 쿼리도 마지막에 있는 nativeQuery= true를 꼭 붙여줘야 작동하더라..
이렇게 쿼리로 줄줄이 작성하면서 느낀거지만 난 jpa를 사용하는거 너무 좋은데 이번 프로젝트에서는 쿼리문만 잔뜩 공부하네...? 다음은 정말 jpa를 사용해 보자...
'자기개발 > 새싹톤_POA' 카테고리의 다른 글
aws, docker 어렵네 (0) | 2023.06.13 |
---|---|
아직도 잘 모르겠는 ... (2) | 2023.06.10 |
intellij springboot jpa save가 왜 안될까 (0) | 2023.06.08 |
우리팀의 구조와 사용할 s3 레포[springboot, intellij] (0) | 2023.06.01 |
api 명세가 어려운 내게 추천 (0) | 2023.06.01 |