首页 > 解决方案 > JPA - 如何在构造函数中获取自动生成的 id?

问题描述

我想要实现的是获取自动生成的 ID,对其进行哈希处理并将其保存到类中的其他字段中,但是在通过构造函数 ID 创建对象的阶段尚未生成。任何解决方法的想法?

@Entity
public class MyClass {
     @Id
     @Column(name="id")
     @GeneratedValue(strategy=GenerationType.AUTO)
      Long id;
      
      String hashID;
      
      MyClass(){
         this.hashID = Utils.hashID(id);
      }
    //setters and getters
  
}
```

标签: javahibernatejpa

解决方案


我能想到的一种方法是您可以使用实体生命周期回调事件,就像@PostLoad在持久性上下文中加载实体时调用的那样,并从 id 初始化散列字段。

例如

@Entity
public class MyClass {
     @Id
     @GeneratedValue(strategy=GenerationType.AUTO)
     Long id;
      
     String hashID;
     
     @PostLoad
     public void postLoad() {
         // Here id is initialized
         this.hashID = Utils.hashID(id);
     }
}

推荐阅读