본문 바로가기

Dot ./에러 모음

[DB Error] 'hibernate_sequence' is not a SEQUENCE

    MariaDB 에러'hibernate_sequence' is not a SEQUENCE

    테이블에 새로운 데이터를 넣으려고 INSERT쿼리를 돌리는 도중 에러가 발생하였다. h2는 잘만되다가 mariaDB를 사용하고나서 생긴 에러이다. 

    (conn=7616) 'hibernate_sequence' is not a SEQUENCE

    could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet

     

    원인: Sequence 테이블 Missing

    구글링해보니 stackoverflow에서는  hibernate는 자동으로 default 테이블인 hibernate_sequence를 사용하는데 내가 따로 Sequence 테이블 이름을 지정해주지 않아서 그렇다고 한다. ResultSet 문구는 DB 테이블이 없을때 발생하는 에러 문구이므로 해당 에러는 sequence 테이블이 따로 없어서 발생한 것 같다.

     

    이제 고치려고 코드를 보니 내가 INSERT쿼리에 들어간 3개의 엔티티 중 1개에만 IDENTITY전략을 써놓고 다른 2개의 엔티티에는 명시를 해주지 않은 실수를 저질렀다는 것을 깨달았다. 그래서 다른 2개 엔티티인 Article, Economic 클래스의 id에 @GeneratedValue(strategy = GenerationType.IDENTITY) 를 명시해줬다.

     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
    • 참고로 MySQL, MairaDB의 IDENTITY 전략은 기본키 생성을 데이터베이스에 위임한다. 해당 DB는 AUTO_INCREMENT를 사용하여 기본키를 생성한다.

     

    추가로 만약 DB에 있는 칼럼 다 삭제안하고 돌리면 아래와 같은 에러 발생하니 컬럼들 모두 정리하고 돌려주도록하자. 

    General error: 1364 Field 'id' doesn't have a default value [duplicate]

     

     

    DB를 새로 생성해주고 다시 데이터를 넣어보니 잘 작동되었다. 배포한 상태에서 이러한 에러가 발생했으면 데이터 따로 빼놨다가 다시 넣어주고 여차저차 굉장히 복잡했을 것 같다. 이래서 배포까지 많은 스테이지를 넣어두는거구나 싶다.

     


    참고

    https://stackoverflow.com/questions/39807483/sequence-hibernate-sequence-not-found-sql-statement