일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- R2DBC Paging
- intellij
- UnsupportedOperationException
- 노드간 통신
- jsonMarshaller
- jar 배포
- 개발 어렵당.ㅠ
- Loki 로그
- pinpoint
- ㅉ때
- 스프링Boot 개발환경
- nGinder
- Armeria
- OIDC
- fake jwt
- formik
- nodeSelector
- 플루터
- reids
- save/update
- 월급루팡 일지
- Ingress Controller Fake
- 논블록킹 성능
- 애자일 싫타
- 더티체킹
- pinpoint 2.5.3
- 핀포인트
- RedirectService
- LPOS
- hbase 저장공간 설정
- Today
- Total
대머리개발자
코틀린 Jpa 영속성... 본문
너무나도 많은 정보와 비슷한 정보에 그냥 훅훅 지나가는 것이 태반이고 직접 부딪쳐서 멍드는 것이 훨 나은듯 한다. ㅎ
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 말고 딴놈으로 했는데도... 역시나..
영속성 컨텍스트(생명주기)를 이해해야 한다고 한다.
쉽게 말해서 하나의 트랜젝션 안에서는 같은놈을 최초 디비 조회하면 다음 부터는 컨텍스트안에서 꺼내 쓰는 거다.(캐쉬.. 같은...)
고로 이미 save할 때 영속성이 만들어 져 있다...근데 그 당시에 항목들은 필요한 항목만 넘기기 때문에.... 대부분의 항목들이 텅텅(null)이다.
얼렁뚱땅 최초의 코드
board.id가 0을 기준으로 create 와 update 구분... update일 경우 굳이 save까지 진행할 필요 없다.. 더티체킹으로!!
최초 DB에서 가져온 데이터에서 변경된 내용을 적용!!
[추가]
테스트를 해보지 않았ㅈ1만 좀 더 공부를 하면서..잘 못 이해를 하고 있던 부분이 있었다.
같은 놈을 최초 디비 조회하고 꺼내서 쓸때 달라진것이 있다면 다시 가져오는게 맞다... 그럼 왜 안가져 왔냐면..
같은 객체인지 체크하는 equals를... 나는 id만 비교하고 있었다...
자동으로 만들어주는 친구를 아무의미 없이 id만 비교하게 만들었던 부분이였다...하악하악. 알고 하자!!
'개발이야기 > 코틀린' 카테고리의 다른 글
이벤트 서버 개발 (0) | 2023.11.16 |
---|---|
enum class 굳잡! (0) | 2023.10.25 |
[코틀린] 더욱 코틀린스럽게(apply, also) (0) | 2023.09.07 |
[코틀린] 스프링 배치(2) - 적용 (0) | 2023.09.04 |
[코틀린] 스프링 배치(1) - 사전 주저리 (0) | 2023.09.01 |