jpa non-transient entity has a null id

greenTeaΒ·2023λ…„ 6μ›” 22일
1

μ—λŸ¬ λ°œμƒ

😭였늘 ν”„λ‘œμ νŠΈμ˜ ν…ŒμŠ€νŠΈλ₯Ό λŒλ¦¬λŠ”λ° μ•„λž˜μ™€ 같은 였λ₯˜κ°€ λ°œμƒν•˜μ˜€μŠ΅λ‹ˆλ‹€.

non-transient entity has a null id

entity의 idκ°€ nullμ΄μ—¬μ„œ μ—λŸ¬κ°€ λ°œμƒν•œ 것이 μ›μΈμž…λ‹ˆλ‹€.

문제 λ°œμƒ μ½”λ“œ

public Entity create(Dto dto, String content) {
        Entity entity = Entity.builder()
                .faq(faq)
                .content(content).build();

        publisher.publishEvent(new event(this, dto, entity));
        return Entity.save(entity);
    }

πŸ« μœ„ μ½”λ“œλ₯Ό κ°„λž΅ν•˜κ²Œ μ„€λͺ…ν•˜μžλ©΄ entityλ₯Ό λ§Œλ“€κ³  λ‚˜μ„œ 이벀트λ₯Ό μ΄μš©ν•˜μ—¬ 값을 μ €μž₯ν•˜κ³  이후에 entityλ₯Ό μ €μž₯ν•˜λŠ” 것인데
λ¬Έμ œλŠ” μ΄λ²€νŠΈμ—μ„œ λ°œμƒν•˜μ˜€μŠ΅λ‹ˆλ‹€.

public void whenEventAfter(Dto dto, Entity entity) {
        Dto dto1 = Dto.toBuilder().comment(entity).build();
        dtorepository.save(faq1);
    }

πŸ«‘μ—¬κΈ°μ„œ λ¬Έμ œκ°€ λ°œμƒν•œ μ΄μœ λŠ” entityλ₯Ό μ €μž₯ν•˜μ§€ μ•Šκ³  λ‹€λ₯Έ 객체에 μ£Όμž…ν›„ μ €μž₯을 ν•˜λ €κ³  ν•˜μ˜€κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.
πŸ˜“jpaμ—μ„œλŠ” 연관관계λ₯Ό 맺은 경우 λ¨Όμ € μ €μž₯을 ν•˜κ³  λ‚˜μ„œμ•Ό idλ₯Ό λ°›κ³  μ˜μ†ν™” λ˜λŠ”λ° λ§Œμ•½ μ˜μ†ν™” ν•˜μ§€ μ•Šμ€ 객체λ₯Ό λ„£μ–΄μ„œ μ €μž₯ν•˜λ €κ³  ν•˜λ©΄ μœ„μ™€ 같은 였λ₯˜κ°€ λœΉλ‹ˆλ‹€. ν•΄κ²° 방법은 λ¨Όμ € μ €μž₯을 ν•΄μ£Όκ³  λ‚˜μ„œ 이벀트λ₯Ό λ°œμƒμ‹œν‚€λ©΄ λ©λ‹ˆλ‹€.

public Entity create(Dto dto, String content) {
        Entity entity = Entity.builder()
                .faq(faq)
                .content(content).build();
		Entity.save(entity);
        publisher.publishEvent(new event(this, dto, entity));
        return entity;
    }

μœ„μ™€ 같이 μž‘μ„±ν•˜λ©΄ λ¬Έμ œκ°€ 해결이 λ©λ‹ˆλ‹€.😎

profile
greenTeaμž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€