(예외) 중첩된 예외는 org.hibernate.id.IdentifierGenerationException입니다. 이 클래스의 ID는 save()를 호출하기 전에 수동으로 할당되어야 합니다.

개발 환경:

스프링 부트 2.7.9

데이터베이스: H2-2.1.214

JDK: 11.0.18 x64

JPA


DEBUG 23-03-11 00:39:202(http-nio-9090-exec-1) octopus.backend.v1.controller.CodeMController.save(55): - tCodeMDto :: TCodeMDto(pCd=null, pCdNm=null, useYn=null, rmk=null)
DEBUG 23-03-11 00:39:206(http-nio-9090-exec-1) octopus.backend.v1.service.CodeService.save(37): - tCodeMDto :: TCodeMDto(pCd=null, pCdNm=null, useYn=null, rmk=null)
INFO  23-03-11 00:39:211(http-nio-9090-exec-1) octopus.advice.ExceptionAdvice.dataAccessException(67): - (ExceptionAdvice >> dataAccessException) getMessage :: {errCode=-1, errMsg=ids for this class must be manually assigned before calling save(): octopus.entity.TCodeM; nested exception is org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): octopus.entity.TCodeM}
WARN  23-03-11 00:39:215(http-nio-9090-exec-1) org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.logException(208): - Resolved (org.springframework.orm.jpa.JpaSystemException: ids for this class must be manually assigned before calling save(): octopus.entity.TCodeM; nested exception is org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): octopus.entity.TCodeM)

이 클래스의 ID는 save()를 호출하기 전에 수동으로 할당해야 합니다. @id 주석이 달린 생성자에 값을 할당하지 않아 발생하는 오류 보지 않았다.

@id는 pk를 의미하는 주석입니다. pk에 값이 없으면 당연히 잘못된 것입니다.

package octopus.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Proxy;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity // jpa entity임을 알립니다.
@Getter // getter를 자동으로 생성합니다.
@Builder // builder를 사용할수 있게 합니다.
@NoArgsConstructor(access = AccessLevel.PROTECTED) // 인자없는 생성자를 자동으로 생성합니다.
@AllArgsConstructor(access = AccessLevel.PROTECTED) // 인자를 모두 갖춘 생성자를 자동으로 생성합니다.
@Table(name = "T_CODE_M")
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" }) // Post Entity에서 User와의 관계를 Json으로 변환시 오류 방지를 위한 코드
@Proxy(lazy = false)
public class TCodeM extends BaseEntity {
    private static final long serialVersionUID = 1L;
    
    /**
     * 상위 코드
     */
    @Id // pk
    @Column(nullable = false, unique = true, length = 50)
    private String pCd;
    
    /**
     * 상위 코드명
     */
    @Column(nullable = false, length = 200)
    private String pCdNm;
    
    /**
     * 사용여부
     */
    @Column(nullable = false, length = 1)
    @Builder.Default
    private String useYn = "N";
    
    /**
     * 비고
     */
    @Column(length = 1000)
    private String rmk;
}
TCodeM tCodeM = TCodeM.builder().pCd(tCodeMDto.getPCd()).pCdNm(tCodeMDto.getPCdNm()).useYn(tCodeMDto.getUseYn())
                .rmk(tCodeMDto.getRmk()).build();
        
log.debug("tCodeM :: {}", tCodeM);

@Id가 적용되는 Java 유형

  • 자바 프리미티브
  • 자바 래퍼
  • java.util.날짜
  • java.sql.날짜
  • java.math.BigDecimal
  • java.math.BigInteger


https://ultrakain.gitbooks.io/jpa/content/chapter4/chapter4.6.html

4.6 기본 키 매핑 jpa

ultrakain.gitbooks.io

Similar Posts

  • 고래는 무엇을 먹나요? 고래가 사람을 잡아먹을까?

    1. 수염고래(Mysticeti) 귀신고래를 제외하면 다른 13종의 수염고래가 바다 위 100m에서 물을 헤엄치거나 꿀꺽 삼키는 것을 볼 수 있습니다. 회색 고래는 단각류(해양 갑각류 범주)와 같은 저서 및 저서 무척추동물을 여과합니다. 다른 수염고래는 크릴새우(새우와 같은 플랑크톤 갑각류) 및 요각류(미세한 갑각류)와 같은 원양 동물성 플랑크톤(수동적 수영 동물)을 걸러내거나 물고기와 같은 작은 넥톤(능동적으로 수영하는 동물)을 먹고 때로는 더 큰…

  • 여드름 없애는 방법 실제 리뷰

    여드름 acne 여드름(acne)이란 피부의 모공이 막혀 생기는 피부질환을 말합니다. 이 질환은 피지선이 모여있는 얼굴, 목, 가슴 등에 많이 발생하며 털을 만드는 모낭에 붙어있는 피지선에 염증이 생겨 발생합니다.이 질환은 일반적으로 사춘기에 발생하며 남성은 15세에서 19세, 여성은 14세에서 16세 사이에 발생 빈도가 높은 것이 특징입니다. 보통은 20대 중반부터 사라지기 시작하지만 최근 25세 이후까지 지속되거나 새로 발생하는 성인…

  • 텍스트 갤럭시 선주문

    텍스트 갤럭시 선주문 많은 사람들이 갤럭시 구독 SMS 방식 대신 카카오톡 구독 보내기를 이용하지만, 저는 여전히 메시지를 선호합니다. 카카오톡 예약메세지는 예약메세지를 보여주지만 SMS메세지는 그렇지 않기 때문입니다. 지금부터 갤럭시 예약 문자 보내는 방법에 대해 자세히 알아보도록 하겠습니다. 예약 문자 보내기 1) 메시지 앱을 엽니다. 오른쪽 하단에 채팅 버튼이 있습니다. 클릭 시 (일대일 채팅)(그룹 채팅)(그룹 문자)에서 원하는…

  • 2023년 청년 레거시 대출 유형에 대한 최신 요약

    2023년 청년 레거시 대출 유형에 대한 최신 요약 오늘은 젊은층에게 적합한 대출상품 4가지를 소개해드리겠습니다. 이들 대출상품은 4500만~1억원을 연 1% 금리로 무이자로 대출받을 수 있다. 대출상품은 청년특별지원대출, 중소기업예금대출, 청년임대보증금, 역세권 청년임대보증금 무이자지원, 청년임대보증금 이자지원사업, 단계적대출 등이다. 스톤리스론. 반응형 또한 Housing City Fund 대출 자격이 있는지 여부와 비접촉식 대출을 온라인으로 신청하는 방법도 알아봅니다. 아래에 요약된 자세한 대출…

  • 봄철 미세먼지와 불청객 대처법

    봄의 불청객 3월 2월 말에서 3월 초가 되면 늘 불청객들이 계시죠? 0000은 오늘 반드시 올 것입니다. 이것이 항상 오는지 알아보자. 봄의 불청객 봄이 오면 빼놓을 수 없는 미세먼지 오늘은 미세먼지 관련 정보와 공기의 법칙에 대해 알아보도록 하겠습니다. 미세먼지와 초미세먼지의 차이 먼지는 다양한 크기로 나옵니다. – 미세먼지(PM-10) : 직경 10㎛ 이하의 초미세먼지를 포함하고 있습니다. – 초미세먼지(PM-2.5)…