【问题标题】:Hibernate SQLGrammarException on join table连接表上的休眠 SQLGrammarException
【发布时间】:2020-04-19 18:38:28
【问题描述】:

我有三个表:usergroupmembershipmembership 表是用户和组的连接表,因为用户可以是多个组的成员,反之亦然。

我有一个 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 的初学者。

谢谢。

【问题讨论】:

    标签: java hibernate spring-boot


    【解决方案1】:

    事实证明,我使用 MySQL 服务器这一事实很重要。 显示原始 SQL 查询时,group 表在那里没有特殊的封闭撇号。这样,MySQL 服务器会假定 group 是错误的 group by 语句。

    用封闭的撇号明确说明表名可以解决问题。

    @Table(name = "`group`")
    public class Group {
        /* some code */
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-15
      • 2016-09-07
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多