Spring Boot 앱을 Heroku에 배포하려고합니다. RemoteMysl에서 제공하는 원격 데이터베이스를 사용합니다 . 그러나 앱을 빌드 할 때 하나의 테이블을 제외하고 데이터베이스에 모든 테이블을 생성합니다. Heroku 애플리케이션 로그에 다음 오류가 발생합니다.
원인 : java.sql.SQLSyntaxErrorException : SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 1 행의 '삭제 계단식 그룹 (id)'근처에서 사용할 올바른 구문을 확인하십시오.
그룹 모델
package com.itsfive.back.model;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import org.springframework.web.multipart.MultipartFile;
import com.itsfive.back.model.audit.DateAudit;
@Entity
@Table(name = "groups")
public class Group extends DateAudit{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
@Size(max = 30)
private String name;
@Size(max = 160)
private String description;
@OneToOne
@JoinColumn(name = "created_by_id", nullable = false)
private User created_by;
private String coverPhoto;
public User getCreated_by() {
return created_by;
}
public void setCreated_by(User created_by) {
this.created_by = created_by;
}
public String getCoverPhoto() {
return coverPhoto;
}
public void setCoverPhoto(String coverPhoto) {
this.coverPhoto = coverPhoto;
}
public Group(@NotBlank @Size(max = 30) String name, @Size(max = 160) String description,User created_by) {
super();
this.name = name;
this.description = description;
this.created_by = created_by;
}
public Group() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String groupName) {
this.name = groupName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public User getCreatedBy() {
return created_by;
}
public void setCreatedBy(User user) {
this.created_by = user;
}
}
글쎄, 나는 당신이 Mysql 8.0을 사용하고 있다고 생각하는데,이 문제는 테이블 이름 Mysql
과 같은 예약 키워드를 사용하고 있기 때문 groups
입니다.
Mysql 8.0의 SQL 예약어를 살펴보면 두 가지 옵션이 있습니다.
1 .- 이름 바꾸기 groups
테이블에 users_group
당신이 원하는 또는 테이블의 이름입니다.
@Table(name = "users_group")
public class Group extends XXXXX { ... }
2.- groups
테이블 이름을 강제로 사용 합니다.
JPA를 사용하는 경우 큰 따옴표로 이스케이프 할 수 있습니다.
@Table(name = "\"groups\"")
public class Group extends XXXXX { ... }
Hibernate 네이티브 API를 사용하는 경우 백틱을 사용하여 이스케이프 할 수 있습니다.
@Table(name = "`groups`")
public class Group extends XXXXX { ... }
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다