我试图用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。
答案 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>();