250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Tomcat
- Exception
- PostgreSQL
- SpringBoot
- 문서
- Python
- error
- Eclipse
- 설정
- oracle
- Core Java
- git
- IntelliJ
- ubuntu
- JavaScript
- Open Source
- maven
- 오픈소스
- MySQL
- Docker
- Thymeleaf
- myBatis
- Spring Boot
- JDBC
- MSSQL
- STS
- jpa
- spring
- AJAX
- Source
Archives
- Today
- Total
헤르메스 LIFE
[Exception] nested exception is org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save() 본문
Exception
[Exception] nested exception is org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save()
헤르메스의날개 2023. 3. 12. 03:39728x90
개발환경 :
Spring Boot 2.7.9
Database : 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]
ids for this class must be manually assigned before calling save() 란 @id 어노테이션이 붙은 생성자에 값을 Assign 하지 않아서 발생하는 오류 입니다.
@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 적용 가능한 자바 타입
- 자바 기본형
- 자바 래퍼형
- String
- java.util.Date
- java.sql.Date
- java.math.BigDecimal
- java.math.BigInteger
https://ultrakain.gitbooks.io/jpa/content/chapter4/chapter4.6.html
728x90