Dev./java
[JPA] Error executing DDL create table 해결법
인쥭
2024. 2. 25. 20:11
반응형
간단한 스터디 프로젝트를 진행하던 도중 요런 엔티티를 정의했다.
@Entity
data class User(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Int?,
val name: String,
val password: String,
val email: String,
@CreationTimestamp
val createdAt: Timestamp?,
val role: String = Constants.ROLE_USER,
) {
companion object {
fun from(user: User): User = user.copy(
password = PasswordEncoder.encode(user.password),
)
}
}
처음에는 테이블도 잘 생성되던게 어느 순간부터 Error executing DDL을 뱉으면서 실패했다.
근데 어떻게 되던게 안될 수가 있지? JPA 정도 규모의 오픈소스라면 그런 일은 없어야하지 않을까? 사실은 처음부터 생성이 안되었던 것은 아닐까? 어떤 미친 과학자가 통 속에 있는 내 뇌에 전기 자극을 주어 테이블이 생성되었다고 착각하게 만들었던 것은 아닐까?
아무튼 찾아보니 요런 문제는 DB 차원에서 예약된 예약어가 엔티티에 포함된 경우에 발생한다고 한다. 내 경우 User라는 엔티티 명이 잘못된 것으로 보이고, 다음과 같이 엔티티의 name을 설정해주니 정상 동작하였다.
@Entity(name = "users") // <-- 이럿게
data class User(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Int?,
val name: String,
val password: String,
val email: String,
@CreationTimestamp
val createdAt: Timestamp?,
val role: String = Constants.ROLE_USER,
) {
companion object {
fun from(user: User): User = user.copy(
password = PasswordEncoder.encode(user.password),
)
}
}