DB를 연동하면서 발생하는 문제라고합니다.
이러한 문제는 바로 Entity와 관련하여 발생하는 문제라고 하는데,
@Entity
@Data
public class Test {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
...
}
데이터 식별을 위하여 Entity에 PK를 지정해줄텐데, 이러한 키를 생성하는 방식에 의하여 다음과 같은 오류가 발생한다고 합니다.
GenerationType.AUTO인 경우, hibernate가 hibernate_sequence라는 테이블을 통하여 키를 생성해준다고합니다.
그런데, 우리는 이러한 테이블을 생성하지 않았으니 이러한 문제가 발생하는 것입니다.
따라서, application.properties 파일에
hibernate.use-new-id-generator-mappings
를 추가하거나, 키 생성타입을 GenerationType.AUTO에서 GenerationType.IDENTITY로 변경하면 해결됩니다.
저는 이러한 문제와 함께 또 다른 오류를 겪었는데,
Table 'XXX.YYY' doesn't exist
오류였습니다.
Entity의 이름과 동일한 테이블이 존재하지 않아서 발생하는 오류인데, 이와 같은 오류는 2가지 방식으로 해결할 수 있다고 합니다.
먼저 첫번째로는 오타 수정입니다.
대소문자를 구별하기 때문에 대소문자에 유의하여 자신이 테이블에 존재하는 컬럼들의 이름과 동일하게 코드를 작성하였는지 확인하는 방법입니다.
근데 솔직히 이게 너무 오래걸리긴합니다.
그래서 두번째 방법으로는 테이블 이름을 식별하는 방식을 변경하는 것입니다.
MySQL 서버를 동작시켜서 show vairables like 'lower_case_table_names';
라는 명령어를 입력하신다면,
아마 기본적으로는 lower_case_table_names 값이 0으로 되어있을 것입니다.
이 값이 0인 경우에는 대소문자를 구별하여 테이블을 식별한다는 의미이기 때문에, 이 값을 1로 변경해주어 대소문자 구별없이 테이블을 식별하게 만들어줍니다.