대머리개발자

코틀린 Jpa 영속성... 본문

개발이야기/코틀린

코틀린 Jpa 영속성...

대머리개발자 2023. 10. 23. 19:20
728x90

너무나도 많은 정보와 비슷한 정보에 그냥 훅훅 지나가는 것이 태반이고 직접 부딪쳐서 멍드는 것이 훨 나은듯 한다. ㅎ

  var boardEntity = boardRepository.save(ModelMapper().map(boardDto, Board::class.java))

save 메서드를 사용 하면 알아서 create OR update를 해준다. 물론 알아서의 기준은 PK의 여부.

 

save를 이용 하고 다시 get해서 리턴하는 구조로 작업을 했다.

    fun get(boardId: Long): BoardDto? {
        return boardRepository.findByIdOrNull(boardId)?.let {ModelMapper().map(it, BoardDto::class.java) }
    }

업데이트 하는 과정에서 원하는 결과가 나오지 않았다. ㅎ

 

수정을 하규  수정된 디비 조회해서 DTO로 변환해서 리턴해주면 되는데... 디비 조회를 안 한다.

혹시나  findByIdOrNull 말고 딴놈으로 했는데도... 역시나..

영속성 컨텍스트(생명주기)를 이해해야 한다고 한다.

 

JPA의 영속성 컨텍스트와 엔티티 생명주기

[개요] JPA를 공부하는데 가장 난해한 부분인 '영속성 컨텍스트'에 대해서 알아보겠습니다. 영속성 컨텍스트에 대한 지식이 수반되어야 JPA의 동작방식을 온전히 이해할 수 있습니다. [영속성 컨

siyoon210.tistory.com

 

쉽게 말해서 하나의 트랜젝션 안에서는 같은놈을 최초 디비 조회하면  다음 부터는 컨텍스트안에서 꺼내 쓰는 거다.(캐쉬.. 같은...)

 

고로 이미 save할 때 영속성이 만들어 져 있다...근데 그 당시에 항목들은 필요한 항목만 넘기기 때문에.... 대부분의 항목들이 텅텅(null)이다.

 

얼렁뚱땅 최초의 코드

 

board.id가 0을 기준으로 create 와 update 구분... update일 경우 굳이 save까지 진행할 필요 없다.. 더티체킹으로!!

 

최초 DB에서 가져온 데이터에서 변경된 내용을 적용!!

 

[추가]

테스트를 해보지 않았ㅈ1만 좀 더 공부를 하면서..잘 못 이해를 하고 있던 부분이 있었다.

같은 놈을 최초 디비 조회하고 꺼내서 쓸때 달라진것이 있다면 다시 가져오는게 맞다... 그럼 왜 안가져 왔냐면..

같은 객체인지 체크하는 equals를... 나는 id만 비교하고 있었다...

 

자동으로 만들어주는 친구를 아무의미 없이 id만 비교하게 만들었던 부분이였다...하악하악. 알고 하자!!

 

 

728x90