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

时间:2011-03-16 03:48:18

标签: java hibernate spring

我在我的pojo中使用它

@Column(name = "uuid")
public String getUuid() {
    return UUID.randomUUID().toString();
}

现在我没有以jsp形式绑定它。

现在问题是,当用户填写表单时,我必须在电子邮件中发送此uuid。

但我可以得到这个,因为在我看来

1)首先我必须在数据库中保存用户详细信息

Session session = sessionFactory.getCurrentSession();
      session.save(person);

现在它意味着我必须再次查询数据库获取人的id,然后获取生成的id。不会浪费资源再次查询数据库。

任何简单的解决方案

2 个答案:

答案 0 :(得分:1)

您是否无法将UUID传递给生成电子邮件的任何内容,或者使用会话属性临时存储它?

答案 1 :(得分:0)

当您使用属性访问时,hibernate将在刷新过程中调用用户实体的所有映射属性的getter,以确定是否有任何值更改。如果有值更改,hibernate将生成相应的UPDATE SQL for更改属性。由于您的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。