MapleStory Finger Point

โ˜ ๏ธ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

JPA save() ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹ ์‚ฌ์šฉ ์‹œ @CreatedDate ์˜ created_at ๊ฐ’์ด null ์ด ๋˜๋Š” ์ด์Šˆ

HYEJU01 2025. 5. 2. 19:52

โ›” ๋ฌธ์ œ ์ƒํ™ฉ

JPA์—์„œ save() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ,

@CreatedDate๊ฐ€ ์„ค์ •๋œ created_at ํ•„๋“œ๊ฐ€ null๋กœ ์ €์žฅ๋˜๋Š” ์ด์Šˆ

 

 

๐Ÿ” ์›์ธ ๋ถ„์„

Spring Data JPA์˜ @CreatedDate๋Š” JPA Auditing ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๊ฐ’์„ ์ฃผ์ž…๋ฐ›๋Š”๋‹ค.

์ด๋•Œ Insert ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋‚˜ Update ์‹œ์—๋Š” @CreatedDate ๊ฐ€ ์„ค์ •๋œ ํ•„๋“œ์— Null ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋ฒ„๋ฆฐ๋‹ค.

 

 

 

 

 

๐Ÿ› ๏ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๊ฒ€์ƒ‰ํ•ด๋ณธ ๊ฒฐ๊ณผ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋“ค์„ ๊ณ ๋ คํ•ด๋ดค์œผ๋‚˜ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Œ.

  • ์—”ํ‹ฐํ‹ฐ์— @EntityListeners(AuditingEntityListener.class)๊ฐ€ ์—†์Œ
  • ํ•ด๋‹น ํ•„๋“œ์— @CreatedDate๋งŒ ์„ ์–ธ๋˜๊ณ , ํด๋ž˜์Šค๊ฐ€ JPA๋กœ ๊ด€๋ฆฌ๋˜๋„๋ก ์ œ๋Œ€๋กœ ์„ค์ •๋˜์ง€ ์•Š์Œ
  • Spring Boot ๋ฉ”์ธ ํด๋ž˜์Šค์— @EnableJpaAuditing ์„ค์ •์ด ๋น ์ง
  • @CreatedDate ํ•„๋“œ๊ฐ€ null์ด ์•„๋‹Œ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜์–ด ์žˆ์–ด ์˜ค๋””ํŒ…์ด ๋ฌด์‹œ๋จ

 

 

๊ฒฐ๊ตญ update ์‹œ์— ๊ธฐ์กด ๊ฐ’์„ ๋ณต์›ํ•ด ์˜ค๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์—ˆ๋‹ค. (ํ•ด๊ฒฐ์™„๋ฃŒ)

 

   @Override
    @Transactional
    public void update(ReadingNote readingNote) {

            ReadingNote existing = readingNoteRespositoryPort.findByNoteId(readingNote.getNoteId())
                    .orElseThrow(() -> new RuntimeException("not found"));

        readingNote.setCreatedAt(existing.getCreatedAt()); // ๊ธฐ์กด ๊ฐ’ ๋ณต์›
        readingNoteRespositoryPort.update(readingNote);
    }