借助Hibernate,如何使用从数据库序列生成的ID来填充另一个字段的一部分

时间:2019-06-07 16:39:55

标签: hibernate

我有一个Hibernate实体,其中包含一个由Postgresql数据库序列生成的id列。插入新记录时,我想在另一列中使用ID的值,例如,如果数据库序列nextval返回的ID为500,我想在另一个字段中使用它来创建值'500_blah'。

我添加了一个@postpersist侦听器,该侦听器可以构造新的列ok,但由于已插入数据库,因此不会设置数据库中的值。我知道我可以添加一个数据库触发器,但是如果可以的话,我想将此逻辑保留在模型中。我可以从休眠状态的日志中看到进行了两次调用以从数据库中获取nextval,然后进行插入。有没有一种方法可以在插入之前拦截nextval,或者如何在@postpersist方法中通过刷新再次刷新记录?

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator =     
   customer_generator")
@SequenceGenerator(name="customer_generator", sequenceName = 
   "customer_id_seq", allocationSize=1)
@Column(name = "id", updatable = false, nullable = false)
private Long id;

@NaturalId(mutable=true)
private String publicId;

@PostPersist
private void afterInsert(Publication obj) {
  if (StringUtils.isEmpty(publicId)) {
        publicId = id + "_blah";
    }

 }

在Hibernate进行插入操作之前,是否有办法拦截nextval?我需要在我的@postpersist方法中添加什么代码以再次设置新值来更新记录?

0 个答案:

没有答案