Хук PostUpdate не работает, пока выполняется пакетное обновление - PullRequest
0 голосов
/ 15 апреля 2020

Я работаю с JPA / Hibernate.

Я делаю массовое обновление:

Фрагмент кода:

@PersistenceContext
private EntityManage entityManager;

   ...
private int update(StudentEntity studentEntity){
 CriteriaBuilder builder = entityManager.getCriteriaBuilder();
 CriteriaUpdate<StudentEntity > criteria = builder.createCriteriaUpdate(StudentEntity.class);
 Root<StudentEntity> root = criteria.form(StudentEntity.class)
 setFields(criteria, root, studentEntity)
 criteria.where(builder.equal(root.get("studentId"), studentEntity.getStudentId()));
 return entityManager.createQuery(criteria).executeUpdate();
}

private setFields(CriteriaUpdate<StudentEntity> criteria,  Root<StudentEntity> root,StudentEntity  studentEntity){
 criteria.set(root.get("studentName"),studentEntity.getStudentName());

 ....
}

При выполнении вышеуказанного кода @PostUpdate ловушка не вызывается, почему?

@PostUpdate
private update (StudentEntity studentEntity){
  System.out.println("@PostUpdate called.");
}

1 Ответ

0 голосов
/ 15 апреля 2020

Из спецификации JPA (раздел 3.5.3):

Обратные вызовы PreUpdate и PostUpdate выполняются до и после операций обновления базы данных до данных объекта соответственно.

Т.е. эти события запускаются только при использовании жизненного цикла объекта для загрузки объекта, манипулирования им, а затем передачи sh состояния в базу данных.

...