我正在使用JPA + Hibernate + SpringBoot + PostgreSQL,以創建不同實體之間的關係,但我收到大量錯誤,包括看起來像SQL錯誤,但應用程序反正開始了。我是否正確編碼manyToMany關係?可能有很多用戶,每個用戶可以有多個角色。也許OneToMany比較好?JPA用戶,角色,manyToMany休眠關係
我使用「彈簧引導起動數據JPA」
這是唯一的休眠文件,我有這麼遠。
Role.java
@Entity(name = "role")
public class Role implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = -5525359165179861924L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "id")
int id;
private String role;
@ManyToMany(mappedBy = "roles",fetch = FetchType.LAZY)
private Set<User> users;
public Role(String role) {
super();
this.role = role;
}
public void setId(int id){
this.id = id;
}
public int getId(){
return id;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public Set<User> getUsers() {
return users;
}
public void setUser(Set<User> users) {
this.users = users;
}
}
User.java
@Entity
@Table(name = "user")
public class User implements java.io.Serializable {
private static final long serialVersionUID = 4910225916550731448L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", unique = true, nullable = false)
private Long id;
@Column(name = "created")
Date created;
@Column(name = "firstName", length = 100)
private String firstName;
@Column(name = "lastName", length = 100)
private String lastName;
@Column(name = "email", length = 150)
private String email;
@Column(name = "username", length = 150)
private String username;
@Column(name = "enabled")
private int enabled;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(joinColumns = @JoinColumn(name = "userId", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "roleId", referencedColumnName = "id"))
private Set<Role> roles;
protected User(){
roles = new HashSet<Role>();
}
public Set<Role> getRoles(){
return roles;
}
public void setRoles(Set<Role> roles){
this.roles = roles;
}
public User(String firstName, String lastName, String email, String username, Set<Role> roles) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.username = username;
this.roles = roles;
}
}
而且錯誤,我得到:
2017-04-24 22:49:19.163 WARN 20488 --- [ restartedMain] org.hibernate.orm.deprecation : HHH90000014: Found use of deprecated [org.hibernate.id.SequenceGenerator] sequence-based id generator; use org.hibernate.id.enhanced.SequenceStyleGenerator instead. See Hibernate Domain Model Mapping Guide for details.
2017-04-24 22:49:19.167 WARN 20488 --- [ restartedMain] org.hibernate.orm.deprecation : HHH90000014: Found use of deprecated [org.hibernate.id.SequenceGenerator] sequence-based id generator; use org.hibernate.id.enhanced.SequenceStyleGenerator instead. See Hibernate Domain Model Mapping Guide for details.
2017-04-24 22:49:19.438 INFO 20488 --- [ restartedMain] org.hibernate.tuple.PojoInstantiator : HHH000182: No default (no-argument) constructor for class: com.example.domain.Role (class must be instantiated by Interceptor)
2017-04-24 22:49:19.527 INFO 20488 --- [ restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000227: Running hbm2ddl schema export
Hibernate: alter table user_roles drop constraint FKrhfovtciq1l558cw6udg0h0d3
2017-04-24 22:49:19.531 ERROR 20488 --- [ restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: alter table user_roles drop constraint FKrhfovtciq1l558cw6udg0h0d3
2017-04-24 22:49:19.531 ERROR 20488 --- [ restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport : ERROR: relation "user_roles" does not exist
Hibernate: alter table user_roles drop constraint FK55itppkw3i07do3h7qoclqd4k
2017-04-24 22:49:19.532 ERROR 20488 --- [ restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: alter table user_roles drop constraint FK55itppkw3i07do3h7qoclqd4k
2017-04-24 22:49:19.533 ERROR 20488 --- [ restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport : ERROR: relation "user_roles" does not exist
Hibernate: drop table if exists role cascade
Hibernate: drop table if exists user cascade
2017-04-24 22:49:19.535 ERROR 20488 --- [ restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: drop table if exists user cascade
2017-04-24 22:49:19.535 ERROR 20488 --- [ restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport : ERROR: syntax error at or near "user"
Position: 22
Hibernate: drop table if exists user_roles cascade
Hibernate: drop sequence hibernate_sequence
2017-04-24 22:49:19.537 ERROR 20488 --- [ restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: drop sequence hibernate_sequence
2017-04-24 22:49:19.538 ERROR 20488 --- [ restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport : ERROR: sequence "hibernate_sequence" does not exist
Hibernate: create sequence hibernate_sequence start 1 increment 1
Hibernate: create table role (id int4 not null, role varchar(255), primary key (id))
Hibernate: create table user (id int8 not null, created timestamp, email varchar(150), enabled int4, first_name varchar(100), last_name varchar(100), username varchar(150), primary key (id))
2017-04-24 22:49:19.564 ERROR 20488 --- [ restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: create table user (id int8 not null, created timestamp, email varchar(150), enabled int4, first_name varchar(100), last_name varchar(100), username varchar(150), primary key (id))
2017-04-24 22:49:19.564 ERROR 20488 --- [ restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport : ERROR: syntax error at or near "user"
Position: 14
Hibernate: create table user_roles (user_id int8 not null, role_id int4 not null, primary key (user_id, role_id))
Hibernate: alter table user_roles add constraint FKrhfovtciq1l558cw6udg0h0d3 foreign key (role_id) references role
Hibernate: alter table user_roles add constraint FK55itppkw3i07do3h7qoclqd4k foreign key (user_id) references user
2017-04-24 22:49:19.585 ERROR 20488 --- [ restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: alter table user_roles add constraint FK55itppkw3i07do3h7qoclqd4k foreign key (user_id) references user
2017-04-24 22:49:19.585 ERROR 20488 --- [ restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport : ERROR: syntax error at or near "user"
Position: 100
2017-04-24 22:49:19.585 INFO 20488 --- [ restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000230: Schema export complete
'用戶'是關鍵詞。你不能使用這個名字作爲你的表名。 – soorapadman
使用反引號來轉義表名。 –