У меня есть объект Hibernate, который содержит столбец id, который генерируется последовательностью базы данных Postgresql.При вставке новой записи я хочу использовать значение идентификатора в другом столбце, например, если идентификатор, возвращаемый последовательностью базы данных nextval, равен 500, я хочу использовать его в другом поле для создания значения «500_blah».
Я добавил слушатель @postpersist, который может создать новый столбец, но он не устанавливает значение в базе данных, поскольку оно уже вставлено.Я знаю, что могу добавить триггер БД, но я хочу сохранить эту логику в модели, если смогу.Я вижу из журналов гибернации, делающих два вызова для получения следующего значения из базы данных, а затем выполняющих вставку.Есть ли способ перехватить следующее значение перед вставкой или как снова очистить запись как обновление в методе @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 выполнит вставкуили какой код мне нужно добавить в мой метод @postpersist, чтобы снова обновить запись, установив новое значение?