대머리개발자

JPA - 더티체킹 본문

개발이야기/자봐

JPA - 더티체킹

대머리개발자 2023. 4. 18. 15:12
728x90

더티체킹을 한번 언급하긴 했었는데.. 역시 이론적으로 아하... 그렇쿠나.. 아하..그렇쿠나...

 

하는 것이라 실제 적용해 보는것이랑 천지차이다 ㅋㅋ

 

1. 게시글을 등록 한다.

2. 채번된 ID를 통해서 Path를 업데이트 한다. (대대대댓글을 위한)

 

따라서 save -> save를 해야 한다... 띠로링..

Hibernate: 
    update
        Board 
    set
        content=?,
        groupId=?,
        menuId=?,
        modDt=?,
        nickname=?,
        noticeType=?,
        path=?,
        regDt=?,
        status=?,
        title=?,
        userId=? 
    where
        id=?

 

난 Path만 수정하고 싶다규!! 

 

mybatis로 돌아가자... 충분하자나??? 무조건 신 기술이 좋은것이 아니자나~..

 

더티 체킹을 통해서 굳이 save 다시 호출 하지 않아도 자동으로 된다고 한다. 다시 한번 굳굳s

https://jojoldu.tistory.com/415

 

더티 체킹 (Dirty Checking)이란?

Spring Data Jpa와 같은 ORM 구현체를 사용하다보면 더티 체킹이란 단어를 종종 듣게 됩니다. 더티 체킹이란 단어를 처음 듣는분들을 몇번 만나게 되어 이번 시간엔 더티 체킹이 무엇인지 알아보겠습

jojoldu.tistory.com

같은 개념도..소처럼 되새김질을 하자..깨달음이...

 

@DynamicUpdate

기본 설정이 아닌 이유가 다 있다.... 무조건적으로 사용하는 것이 아닌 개똥 철학이 있어야 한다.

 

남들 다 하니깐 하는 것이 아닌 본인만의 납득할만한 이유가 있자.. ...알고 쓰자!!ㅋ

 

 

나의 경우 컬럼의 크기(본문의 내용)가 크기 때문에 성능적 이슈보단 업데이트 할 때 이슈가 더 많을 것으로 판단해서 사용하고자 하는 것이다...

 

Hibernate: 
    update
        Board 
    set
        path=? 
    where
        id=?

 

...R2DBC 사용하다 넘어 오니깐. 천국이 따로 없네!!! 쿄쿄

 

정말 fun 이다 ㅋ 

    @Transactional
    fun create(boardDto:BoardDto): BoardDto? {
        if(boardDto.menuId == 0){
            throw IllegalArgumentException("menuId is null")
        }

        var entity = boardRepository.save(modelMapper.map(boardDto, Board::class.java))

        entity = if(boardDto.parentId == 0L){
            updatePath(entity)
        }else{
            val parentBoard = get(boardDto.parentId) ?: throw Exception("parentBoard is null")
            updatePath(entity, parentBoard.path)
        }
        return entity.id?.let { get(it) }
    }

    fun updatePath(board:Board, parentPath:String=""): Board{
        board.updatePath(
                            if("" == parentPath){
                                String.format("%010d", board.id)
                            }else{
                                parentPath + ">" +String.format("%010d", board.id)
                            }
        )
        return board
    }
728x90

'개발이야기 > 자봐' 카테고리의 다른 글

16차 월급루팡의 일지(쉼표,)  (1) 2023.06.05
인증서버 - 포럼게시판(코틀린)  (1) 2023.05.19
NULL 처리  (0) 2023.04.08
ThreadLocal  (0) 2023.04.07
Oauth2 Provider(Naver/Kakao/Google)  (0) 2023.03.28