Я использую Camel и JPA для сохранения объектов в DB Postgres. В каждой сущности у меня есть поле под названием «история», которое содержит все старые значения данного объекта. Я ищу способ заполнить это поле автоматически перед каждой операцией обновления. Surfing the web, я нашел перехватчики JPA, но я видел, что они используются для аудита/ведения журнала. Я ошибаюсь? Каков наилучший способ сделать это?JPA/Hibernate: как автоматически обновлять поля при обновлении сущности
ответ
Перехватчики JPA/Hibernate (которые зависят от версии, которую вы используете) являются одним из способов сделать это. Аудит/ведение журнала аналогично тому, что вы хотите сделать, т. Е. Автоматически обновлять некоторые свойства столбца /, когда сам объект обновляется (любое свойство). Просто обратите внимание, что запросы ручного обновления обходят эти перехватчики, поэтому их следует избегать.
Как вы используете эти перехватчики, зависит от того, как вы хотите реализовать эту функцию истории. Если вы делаете это, создавая представление строки/байта и сохраняя его в столбце, оно должно работать. Если вы планируете создать другой объект и т. Д., Вам, возможно, придется собирать изменения/старые значения в перехватчике, и при успешной фиксации вы сохраняете собранные значения. AFAIK невозможно (по крайней мере, не просто) создать новый объект при вызове перехватчиков.
Спасибо за ваш ответ. Для «запросов ручного обновления» вы подразумеваете запрос, выполняемый непосредственно в БД (не используя приложение)? В этом случае я могу избавиться от этого. – dylaniato
@dylaniato Я имею в виду любой запрос (JPQL/HQL или SQL), непосредственно вызываемый в диспетчере сущностей. Чтобы перехватчики работали, вы должны позволить Hibernate определить изменения и инициировать запросы, по крайней мере, это то, что мы узнали из наших тестов/реализаций. – Thomas
@Entity
@Table(name = "entities")
public class Entity {
...
private Date created;
private Date updated;
@PrePersist
protected void onCreate() {
created = new Date();
}
@PreUpdate
protected void onUpdate() {
updated = new Date();
}
}
Вы можете использовать @EntityListeners
и предоставить сущности Приёмник класс к нему, и вы также можете повторно использовать это всякий раз, когда вы хотите
В вашей сущности Слушатель класса, вы можете предоставить методы обратного вызова с @PrePersit, @PostPersist, @PreUpdate, @PostUpdate, @PreDelete, @PostDelete
аннотациями. Эти методы будут автоматически вызваны для их соответствующих действий.
Для получения более подробной информации вы можете прочитать Spring Data JPA Auditing: Saving CreatedBy, CreatedDate, LastModifiedBy, LastModifiedDate automatically.
- 1. Метка времени автоматически обновлять при обновлении любого поля в MySQL
- 2. Автоматически обновлять атрибут при обновлении другого атрибута
- 3. Обновлять div автоматически при обновлении переменной PHP
- 4. Отключить Doctrine Timestampable автоматически обновлять поле `updatedAt` при определенном обновлении
- 5. Как автоматически обновлять метку времени при обновлении таблицы?
- 6. автоматически обновлять медиа-вики-страницы при обновлении в лаке
- 7. Как автоматически обновлять поля в Метеор?
- 8. Обратные вызовы на сущности при создании/обновлении
- 9. обновлять json-файл динамически при обновлении mysql
- 10. Как автоматически обновлять grandtotal при изменении количества
- 11. Автоматически обновлять номер версии
- 12. Автоматически обновлять значения столбца строки
- 13. автоматически обновлять объявления на сайте
- 14. Entity Framework/SQL2008 - Как автоматически обновлять поля LastModified для объектов?
- 15. автоматически обновлять MySQL поля на основе значения другого поля
- 16. значения комбо-бокс автоматически обновлять
- 17. Как автоматически обновлять TableAdapter привязаны к TextBox
- 18. Как автоматически обновлять рабочее дерево при обновлении-ref из вывезенного филиала
- 19. Rails: как автоматически обновлять связанные атрибуты таблицы при обновлении родительских атрибутов
- 20. SolrJ: игнорировать поля при обновлении
- 21. Получить поля при обновлении mongodb
- 22. получение ошибки при обновлении поля
- 23. Ошибка при обновлении вложенного поля
- 24. Автоматически обновлять ссылки при открытии книги
- 25. Обновление текстового поля при обновлении текстового поля
- 26. Как автоматически обновлять iframe angularjs?
- 27. Subversion: как автоматически обновлять репозиторий
- 28. Как автоматически обновлять список сообщений?
- 29. Как автоматически обновлять git-крючки?
- 30. Как автоматически обновлять формулы excel?
Как вы планируете хранить изменения в одном столбце? – WeMakeSoftware
@Funtik это поле json, обработано по умолчанию postgres – dylaniato
Я думаю, вы также можете использовать триггер db. –