gpt4 book ai didi

java - Hibernate JPA 持久性 - 如何在插入/保存/合并后获取新的实体标识符

转载 作者:行者123 更新时间:2023-12-02 06:06:12 25 4
gpt4 key购买 nike

我对 Hibernate/JPA 持久性很陌生,并且正在尝试找到如何通过我为此创建的新对象获取数据库中插入记录的 ID。

我正在使用 Hibernate 4.0.4 并使用 hibernates session API,而不是 EntityManager。

用户类别

@Entity
@Table(name = "users")
public class User implements Serializable {

private String email;
private String firstName;
private int id;
private String lastName;
private String password;

@Column(name = "email", nullable = false, unique = true)
public String getEmail() {
return email;
}

@Column(name = "firstName", nullable = false)
public String getFirstName() {
return firstName;
}

@Id
@Column(name = "id")
public int getId() {
return id;
}

@Column(name = "lastName")
public String getLastName() {
return lastName;
}

@Column(name = "password", nullable = false)
public String getPassword() {
return password;
}

public void setEmail(String email) {
this.email = email;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public void setHeroes(List<Hero> heroes) {
this.heroes = heroes;
}

public void setId(int id) {
this.id = id;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public void setPassword(String password) {
this.password = password;
}

}

执行代码 - 尝试 1

User user = new User();
user.setEmail((String) arg.get("email"));
user.setFirstName((String) arg.get("firstName"));
user.setLastName((String) arg.get("lastName"));
user.setPassword(Password.getSaltedHash((String) arg.get("password")));
Transaction tx = sessionFactory.getCurrentSession().beginTransaction(); //committed later on...
int id = (Integer) sessionFactory.getCurrentSession().save(user); //This always returns 0 even though inserted rows in database have IDs as expected

执行代码 - 尝试 2

//Same as before for defining user...

Transaction tx = sessionFactory.getCurrentSession().beginTransaction(); //commited later on...
user = (User) sessionFactory.getCurrentSession().merge(user);
int id = user.getId(); //This also always returns 0 even though the rows are being inserted into the database as expected

所以我的问题是:

如何成功地将用户对象持久化到数据库并通过该用户对象获取记录的ID?

最佳答案

有不同类型的 id 列。我想您想获取生成的值,请结合 @Id 查看 @GeneeratedValue 注释的不同选项。

据我所知,GenerationType.AUTO 能够在将 id 字段存储到数据库后自动更新它。但在使用 id-getter 之前,您可能必须调用“flush()”。

我的最佳实践是尽量不依赖对象的技术 ID。如果您需要它来处理对象之间的关系,那么您绝对应该更喜欢使用 @OneToMany 等。

关于java - Hibernate JPA 持久性 - 如何在插入/保存/合并后获取新的实体标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22274351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com