Hibernate unsuccesfull创建表,sql语法错误

时间:2017-03-24 18:59:35

标签: mysql database hibernate jpa spring-boot

我试图用hibernate创建表,但是我得到sql语法错误,我不知道为什么。

用户

@Entity
@Table(name="users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @ManyToMany
    @JoinTable(name="user_role", joinColumns = @JoinColumn(name="user_id"),
    inverseJoinColumns = @JoinColumn(name="role_id)"))
    private Set<Role> roles;
    }

角色

@Entity
@Table(name="role")
public class Role {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    private String name;
    @ManyToMany(mappedBy="roles")
    private Set<User> users;
    }

application.properties

spring.datasource.url = jdbc:mysql://localhost/basket
spring.datasource.username = root
spring.datasource.password =
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = create
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
  

org.hibernate.tool.hbm2ddl.SchemaUpdate:HHH000388:不成功:create table user_role(user_id bigint not null,role_id)bigint not null,主键(user_id,role_id)))

     

org.hibernate.tool.hbm2ddl.SchemaUpdate:您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以便在第1行的'bigint not null,主键(user_id,role_id)))'附近使用正确的语法

     

org.hibernate.tool.hbm2ddl.SchemaUpdate:HHH000388:不成功:alter table user_role add constraint FK_75dvukqj0muwehqn7y8qi9j5c foreign key(role_id))引用角色(id)

     

org.hibernate.tool.hbm2ddl.SchemaUpdate:您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以便在第1行的')references role(id)'附近使用正确的语法

     

org.hibernate.tool.hbm2ddl.SchemaUpdate:HHH000388:不成功:alter table user_role add constraint FK_apcc8lxk2xnug8377fatvbn04外键(user_id)引用用户(id)

     

org.hibernate.tool.hbm2ddl.SchemaUpdate:表'basket.user_role'不存在

我正在使用MariaDB 10.1.16。

1 个答案:

答案 0 :(得分:4)

该行存在问题:

@JoinTable(name="user_role", joinColumns = @JoinColumn(name="user_id"),
inverseJoinColumns = @JoinColumn(name="role_id)"))
在您的User类中

。在role_id之后删除')'。这就是你得到sql语法错误的原因。

而且你也没有在两个实体中定义集'角色'和'用户'。

更改声明:

private Set<Role> roles;
private Set<User> users;

private Set<Role> roles=new HashSet<Role>();
private Set<User> users=new HashSet<User>();