【发布时间】:2014-03-08 20:01:06
【问题描述】:
我对 Hibernate / JPA 持久性非常陌生,我正在尝试通过我为此创建的新对象找到如何获取数据库中插入记录的 ID。
我正在使用 Hibernate 4.0.4,并且正在使用休眠会话 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?
【问题讨论】: