java 배우기/TIL

"Unsuccessful: drop table if exists user cascade" Spring 작동 오류 해결하기

checkuu 2024. 8. 30. 15:46

Problem

 

코드에 오타가 없는데 작동 중에 해당 에러가 뜨면서 작동이 정지 되었다.

구글에 찾아보니 내가 Entity에 사용한 User라는 단어가 H2 database의 예약어이기 때문에 발생한 오류 였다.

 

Solution

1. 테이블명 직접 명시

@Entity
@Getter
@NoArgsConstructor
@Table(name = "\"USER\"")
public class User extends Timestamped {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String userName;

    @Column(unique = true)
    private String email;

    public User(String userName, String email) {
        this.userName = userName;
        this.email = email;
    }
}

내가 적용한 방법은 테이블명을 직접 명시 해주는것이었다.

@Table(name = "\"USER\"") 로 user가 테이블 명이라고 명시하니 해결되었다!!

 

위방법말고도 다른해결책 2가지가 더 있었다.

2. 예약어가 아닌 다른 이름을 지정

@Entity
@Getter
@NoArgsConstructor
public class Memeber extends Timestamped {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String memberName;

    @Column(unique = true)
    private String email;

    public User(String memberName, String email) {
        this.userName = memberName;
        this.email = email;
    }
}

위의 코드와 같이 User -> Member로 바꿔주는 방법이 있다.

이방법은 이미 코드를 많이쳐서 User를 바꿔줘야할 부분이 많아서 하지 않았다.

 

3.properties.yml 파일 수정

H2 datasource - url 에 NON_KEYWORDS=USER라고 직접 명시해주는 방법이있다.

'java 배우기 > TIL' 카테고리의 다른 글

Spring 좋아요 중복 방지  (1) 2024.09.03
깃허브 브랜치 삭제 반영하기  (0) 2024.09.03
Spring 익숙해지기 개인과제2  (0) 2024.08.30
수준별 강의 복습하기  (1) 2024.08.29
REST API  (0) 2024.08.28