SQLSyntaxErrorException при развертывании приложения Spring Boot в Heroku - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь развернуть приложение Spring Boot на Heroku. Он использует удаленную базу данных, которая предоставляется RemoteMysl . Однако, когда приложение собирается, оно создает все таблицы в базе данных, кроме одной таблицы. Я получаю следующую ошибку в журнале приложений Heroku.

Причина: java.sql.SQLSyntaxErrorException: в синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с «groups (id) при удалении каскада» в строке 1

Модель группы

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;
    }
}

1 Ответ

1 голос
/ 28 октября 2019

Ну, я думаю, что вы используете Mysql 8.0, тогда эта проблема связана с тем, что вы используете Mysql зарезервированные ключевые слова, такие как groups в названии таблицы.

Вы можете посмотреть SQLзарезервированные слова для Mysql 8.0 , тогда у вас есть две опции

1.- Переименуйте groups таблицу в users_group или имя таблицы, которую вы хотите.

@Table(name = "users_group")
public class Group extends XXXXX { ... }

2.-Принудительно использовать groups имя таблицы.

Если вы используете JPA, вы можете использовать двойные кавычки:

    @Table(name = "\"groups\"")
    public class Group extends XXXXX { ... }

Если вы используете собственный API Hibernate, тогда вы можете выйтиих с помощью обратных кавычек:

    @Table(name =  "`groups`")
    public class Group extends XXXXX { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...