Java 如何在hibernate中保存前获取自动生成的字段

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();

我在我的pojo中使用这个

@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