hibernate不会创建所有关联的表

时间:2017-03-28 17:25:00

标签: java hibernate spring-boot

我有三个实体类。通过使用弹簧启动我试图创建所有这三个表。但它只创建了一个表中的一个。

我的所有三个班级都是: -

Users.java

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

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id", nullable = false, updatable = false)
private long id;
private String username;
private String password;
private String firstName;
private String lastName;

@Column(name="email", nullable = false, updatable = false)
private String email;
private String phone;
private boolean enabled=true;

@OneToMany(mappedBy = "users", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JsonIgnore
private Set<UserRole> userRoles = new HashSet<>();

---------------------getter setters--------------------------------
}

UserRole.java

@Entity
@Table(name="user_role")
public class UserRole {

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

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="user_id")
private Users users;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="role_id")
private Role role;

===============getter setters==============================
}

Role.java

@Entity
@Table(name="user_role")
public class UserRole {

@Id
private long roleId;
private String name;

@OneToMany(mappedBy = "role", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
private Set<UserRole> userRoles = new HashSet<>();

==============getter setters ====================

我希望hibernate创建三个表,但在我的情况下,只创建了一个表角色,我得到的错误就像

引起:org.hibernate.tool.schema.spi.SchemaManagementException:无法对JDBC目标执行模式管理[create table user_role(user_role_id numeric(19,0)identity not null,role_id numeric(19,0), user_id numeric(19,0),主键(user_role_id))]

引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法中有错误;查看与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在#39; identity not null,role_id numeric(19,0),user_id numeric(19,0),primary key(us&#39; at line)附近使用1

1 个答案:

答案 0 :(得分:0)

错误表明您正在尝试使用&#39; IDENTITY NOT NULL&#39;在MySQL数据库引擎中,这是无效的。 IDENTITY是SQL SERVER关键字。

确保为数据库引擎正确配置了Hibernate。你应该使用MySQLDialect。

在你的application.properties中:

foo