Java 如何在hibernate中保存前获取自动生成的字段
我在我的pojo中使用这个Java 如何在hibernate中保存前获取自动生成的字段,java,hibernate,spring,Java,Hibernate,Spring,我在我的pojo中使用这个 @Column(name = "uuid") public String getUuid() { return UUID.randomUUID().toString(); } 现在我还没有将其绑定到jsp表单中 现在的问题是,当用户填写表单时,我必须在电子邮件中发送此uuid 但是我能得到吗,因为在我看来 1) 首先,我必须在数据库中保存用户详细信息 Session session = sessionFactory.getCurrentSession();
@Column(name = "uuid")
public String getUuid() {
return UUID.randomUUID().toString();
}
现在我还没有将其绑定到jsp表单中
现在的问题是,当用户填写表单时,我必须在电子邮件中发送此uuid
但是我能得到吗,因为在我看来
1) 首先,我必须在数据库中保存用户详细信息
Session session = sessionFactory.getCurrentSession();
session.save(person);
现在,这意味着我必须再次查询数据库,获取person的id,然后获取生成的id。这不会浪费再次查询数据库的资源
任何简单的解决方案您不能将UUID传递给生成电子邮件的任何人或使用会话属性临时存储它吗?当您使用属性访问时,hibernate将在刷新过程中调用用户实体的所有映射属性的获取程序,以确定是否有任何值发生了更改。如果有值发生更改,然后,hibernate将为更改属性生成相应的更新SQL。由于您的
getUuid()
始终返回一个新的随机值,因此hibernate将始终检测到此更改,并在更新用户实体时始终将uuid
列的值更新为新值
通过电子邮件发送给用户的uuid
不再正确。因此,我认为您的uuid
至少应该是只读的,并且应该在创建用户实例时自动生成。您可以通过在用户的构造函数中分配uuid
的值来实现它,如下所示:
public class User {
.......
private String uuid;
......
public User() {
this.uuid = UUID.randomUUID().toString();
}
public String getUuid() {
return uuid;
}
private void setUuid(String uuid) {
this.uuid = uuid;
}
}
然后,您可以调用user.getUuid()
,在实例化用户后获取生成的id