我有一个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方法中添加什么代码以再次设置新值来更新记录?