Hibernate SQLGrammarException на соединительной таблице - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть три таблицы: user, group и membership. Таблица membership - это объединяющая таблица пользователей и групп, поскольку пользователи могут быть членами нескольких групп и наоборот.

У меня есть приложение Spring Boot, в котором я хотел бы получить доступ к группам определенный пользователь.

Класс пользователя

@Entity
public class User {
    /* members */

    @OneToMany
    @JoinTable(
            name = "membership",
            joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "group_id")
    )
    private Set<Group> groups;

    public Set<Group> getGroups() {
        return groups;
    }

    /* getters, setters */
}

Групповой класс

@Entity
public class Group {
    /* members */

    @OneToMany
    @JoinTable(
            name = "membership",
            joinColumns = @JoinColumn(name = "group_id"),
            inverseJoinColumns = @JoinColumn(name = "user_id")
    )
    private Set<User> users;

    public Set<User> getUsers() {
        return users;
    }

    /* getters, setters */
}

Использование

Integer id;

User user = userRepository.findById(id).get();

Set<Group> groups = user.getGroups();

Когда я отлаживаю код, я получаю следующую ошибку:

Unable to evaluate the expression Method threw 'org.hibernate.exception.SQLGrammarException' exception.

Я новичок в Spring Boot и Hibernate.

Спасибо.

1 Ответ

0 голосов
/ 20 апреля 2020

Оказывается, важен тот факт, что я использую MySQL сервер. При отображении необработанного запроса SQL отображается таблица group без специальных символов апострофов. Таким образом, сервер MySQL предполагает, что group является ошибочным оператором group by.

Явное указание имени таблицы со знаками апострофа решает проблему.

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