我开始在我的应用程序中使用 hibernate 框架,并且对如何处理主键感到困惑。
假设我有一个名为 User 的实体,如下所示:
@Entity
@Table(name="REGUSER")
public class User {
@Id
private int id;
private String username;
private String password;
private String email;
public User(int id, String username, String password, String email){
this.id = id;
this.username = username;
this.password = password;
this.email = email;
}
public User(){}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" + "id=" + id + ", username=" + username + ", password=" + password + ", email=" + email + '}';
}
}
它将用户实体注册到数据库。要持久化数据的数据表:
|Id | Username | Email | Password|
但是当尝试保存 User 对象时,例如
userA = new User( 0, "NameTest", "MailTest", "PWDTest");
不能接受 null,因为会引发 ID 错误。
所以我感到困惑的地方:
在持久化之前已知用户id的情况下,如何将用户id传递到参数中,并添加到表中?
如何不传递任何内容作为 id,并让 hibernate 处理主键分配和自动增量?
非常感谢。
最佳答案
据我所知,通常我们添加@GenerateValue
注释来使hibernate引擎自动分配主键字段。在这种情况下,我们在创建它时不需要分配 id。
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id
public User(String username, String password, String email){
this.username = username;
this.password = password;
this.email = email;
}
User u = User('name', 'pw', 'email@email.com')
session.save(u);
System.out.println(u.id); // the id is automatically assigned after persist
关于java - Hibernate会以什么方式处理主键数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28861202/