JdbcSQLSyntaxErrorException 해결

귀찮Lee·2022년 8월 28일
0

Error Handling Log

목록 보기
3/8
post-custom-banner

◎ JdbcSQLSyntaxErrorException

  • SQL에서 사용하는 예약어를 사용했을 때 생기는 ERROR

◎ 문제 상황

  • JPA에 Entity를 구현하고, Spring을 실행시켜서 확인 중
    • Table을 만들어지는 SQL Query가 정상적으로 실행되지 않음을 확인
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "create table question (question_id bigint generated by default as identity, created_at timestamp, last_modified_at timestamp, content varchar(10000) not null, [*]like bigint not null, title varchar(255) not null, view bigint not null, answer_id bigint, primary key (question_id))"; expected "identifier"; SQL statement:
create table question (question_id bigint generated by default as identity, created_at timestamp, last_modified_at timestamp, content varchar(10000) not null, like bigint not null, title varchar(255) not null, view bigint not null, answer_id bigint, primary key (question_id)) [42001-214]
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "QUESTION" not found; SQL statement:
@NoArgsConstructor
@Getter
@Setter
@Entity
public class Question extends Auditable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long questionId;

    @Column(nullable = false)
    private String title;

    @Column(nullable = false, length = 10000)
    private String content;

    @Column(nullable = false)
    private long view;

    @Column(nullable = false)
    private long like;

    @ManyToOne
    @JoinColumn(name = "ANSWER_ID", nullable = false)
    private Member member;

    @OneToMany(mappedBy = "question")
    private List<Answer> answers;

    @OneToOne
    @JoinColumn(name = "ANSWER_ID", insertable = false, updatable = false)
    private Answer bestAnswer;


}

◎ 해결 방법

  • 발생 원인

    • Entity(DB Table)의 fieldName(Column)이 SQL 문법으로 사용되는 like를 사용함
  • 해결 방법

    • like를 vote로 수정하여 사용
    • Table을 설계할 때는 Table의 Column 값을 SQL 예약어를 사용하지 말도록 하자.

◎ 참고 자료

profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!
post-custom-banner

0개의 댓글