在PostPersist事件方法中更新JPA实体

问题描述

我想用@PostPersist方法更新实体,以获取生成的ID并将其放在同一表的另一列中:

@PostPersist
public void postPersist(Customer customer) {
   customer.setCode("Code_" + customer.getId);
}

此更新未持久存储在数据库中。因此,我应该使用附加到生成的ID上的字符串“ Code_”来更新实体。

解决方法

@PostPersit@PrePersist是回调方法。它们在JPA事务之后执行。 就您而言,您可以:

  1. code方法之后手动设置persist,并使用此code再次请求保存客户
  2. 您可以保留@PostPersist批注,但在这种情况下,您还需要另一个保存请求
  3. 如果您使用的是custom generator,则可以在保存(How do I know the id before saving an object in jpa)之前获得id

Code example

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...