С Hibernate, как я могу использовать идентификатор, сгенерированный из последовательности базы данных, чтобы заполнить часть другого поля - PullRequest
0 голосов
/ 07 июня 2019

У меня есть объект 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, чтобы снова обновить запись, установив новое значение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...