java - Hibernate会以什么方式处理主键数据

标签 java hibernate null primary-key

我开始在我的应用程序中使用 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/

相关文章:

javascript - JavaScript 中的逻辑运算符 && 及其等效于 C#

JavaFX 使用 Platform.runLater 和 SwingUtilities.involkeLater

java - Hibernate 级联类型还是其他类型?

java - 错误 ValidationException : Call to TraversableResolver. isReachable() 引发异常

coldfusion - 如何处理来自 ColdFusion 查询的空值?

mysql - 带 NULL 的唯一键

java - 如何在游戏模型中表示 oracle blob

java - 跟踪 Java 中消失的线程

java - 是否可以在pdf文档中标记字符串?

java - Hibernate Criteria - 从选择中排除 groupProperty