SpringBoot 1.5에서 작성한소스를 2.1 프로젝트에 옮기는 과정에서 오류가 발생했다.
Sequence관련 에러가 발생했고 버전업에 해당 이슈가 존재하는지 생각도 못해서 한참을 시간낭비하다
jojoldu 님 블로그에 언듯 스쳐본 기억이 나서 겨우 해결했다 (https://jojoldu.tistory.com/295)
간단하게 말하면
SpringBoot가 Hibernate의 id생성전략을 따라가는 설정이 있고
이 설정이 1.5 fale ,2.0은 true 이기 때문에 같은소스를 사용해도 문제가 발생한것(자세한내용은 해당블로그 참조)
결론
SpringBoot 2.0.x 에서 GeverateValue=auto는 Hibernate의 id생성 전략을 따라간다.
Hibernate의 id생성 전략은 모든테이블이 seq를 공유한다.
즉 a테이블에서 1~5까지 seq를 생성했다면 b테이블에서 seq생성시 6부터 시작한다는것.
아래 해결방법처럼 설정하면 이전처럼 각 테이블에서 seq는 1부터 생성되게 된다.
해결방법
1. application.properties에서 spring.jpa.hibernate.use-new-id-generator-mappings : false 설정
2. strategy = GenerationType.IDENTITY 로 설정해주는 것
추가
1 2 3 4 5 6 7 | create table user ( id bigint not null, otp_secret_key varchar(255), plain_password varchar(255), username varchar(100), primary key (id) ) engine=InnoDB | cs |
@id @GeneratedValue(strategy = GenerationType.AUTO)로 설정하면
PK에 AUTO INCREMENT설정이 꺼진상태로 테이블이 생성된다
이렇게 생성된 테이블은 GenerationType.IDENTITY로 바꿔서 실행시켜도
AUTO INCREMENT가 켜지지 않으므로 pk값이 생성되지 않아 에러가 발생한다
따라서 반드시 직접 쿼리를 날려 AUTO INCREMENT를 설정하거나 테이블을 삭제한뒤 JPA로 다시 생성해야한다.
'SpringBoot' 카테고리의 다른 글
스프링 시큐리티 기본인증 + Rest API 테스트 예제 (0) | 2018.12.26 |
---|---|
Spring boot Junit 간단 사용 연습 (0) | 2018.12.03 |