Аннотации @PreUpdate и @PostUpdate
Аннотации @PreUpdate и @PostUpdate используются в Java Persistence API (JPA) для указания методов обратного вызова (callback), которые выполняются до и после обновления сущности в базе данных. Они находятся в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
@PreUpdate: Метод, аннотированный @PreUpdate, вызывается перед тем, как сущность будет обновлена в базе данных (перед выполнением update).
@PostUpdate: Метод, аннотированный @PostUpdate, вызывается после того, как сущность была успешно обновлена в базе данных (после выполнения update).
Эти аннотации полезны для выполнения дополнительной логики, например, валидации, логирования или обновления зависимых данных, до или после обновления сущности.
Параметры и настройки
Аннотации @PreUpdate и @PostUpdate не принимают параметров. Они применяются к методам сущности, которые должны быть вызваны в соответствующий момент жизненного цикла сущности.
Требования к методам:
Метод должен быть void и не принимать параметров.
Метод может иметь любой модификатор доступа (public, protected, private).
Метод не должен быть статическим.
Пример использования:
Жизненный цикл
@PreUpdate:
Вызывается перед выполнением операции update в EntityManager.
Используется для валидации или модификации данных перед обновлением.
Пример: проверка обязательных полей, обновление временных меток.
@PostUpdate:
Вызывается после успешного выполнения операции update и фиксации транзакции.
Используется для выполнения действий после обновления, например, логирования или отправки уведомлений.
Пример: логирование ID обновленной сущности, отправка события в систему сообщений.
Кастомизация событий:
Если требуется более сложная обработка событий, можно использовать @EntityListeners для определения слушателей сущностей.
Пример использования @EntityListeners:
Варианты настройки
Использование в сущности:
Методы @PreUpdate и @PostUpdate можно определить непосредственно в сущности.
Использование @EntityListeners:
Для разделения логики можно вынести методы обратного вызова в отдельный класс и использовать @EntityListeners.
Глобальные слушатели:
Для применения логики ко всем сущностям можно зарегистрировать глобальный слушатель через Hibernate.
Пример глобального слушателя:
Регистрация глобального слушателя в Hibernate:
#Java #Training #Hard #Spring #SpringDataJPA #PreUpdate #PostUpdate
Аннотации @PreUpdate и @PostUpdate используются в Java Persistence API (JPA) для указания методов обратного вызова (callback), которые выполняются до и после обновления сущности в базе данных. Они находятся в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
@PreUpdate: Метод, аннотированный @PreUpdate, вызывается перед тем, как сущность будет обновлена в базе данных (перед выполнением update).
@PostUpdate: Метод, аннотированный @PostUpdate, вызывается после того, как сущность была успешно обновлена в базе данных (после выполнения update).
Эти аннотации полезны для выполнения дополнительной логики, например, валидации, логирования или обновления зависимых данных, до или после обновления сущности.
Параметры и настройки
Аннотации @PreUpdate и @PostUpdate не принимают параметров. Они применяются к методам сущности, которые должны быть вызваны в соответствующий момент жизненного цикла сущности.
Требования к методам:
Метод должен быть void и не принимать параметров.
Метод может иметь любой модификатор доступа (public, protected, private).
Метод не должен быть статическим.
Пример использования:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@PreUpdate
private void beforeUpdate() {
System.out.println("Before updating user: " + this.name);
if (this.name == null) {
this.name = "DEFAULT_NAME";
}
}
@PostUpdate
private void afterUpdate() {
System.out.println("User updated with ID: " + this.id);
}
}
Жизненный цикл
@PreUpdate:
Вызывается перед выполнением операции update в EntityManager.
Используется для валидации или модификации данных перед обновлением.
Пример: проверка обязательных полей, обновление временных меток.
@PostUpdate:
Вызывается после успешного выполнения операции update и фиксации транзакции.
Используется для выполнения действий после обновления, например, логирования или отправки уведомлений.
Пример: логирование ID обновленной сущности, отправка события в систему сообщений.
Кастомизация событий:
Если требуется более сложная обработка событий, можно использовать @EntityListeners для определения слушателей сущностей.
Пример использования @EntityListeners:
@Entity
@EntityListeners(UserListener.class)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
public class UserListener {
@PreUpdate
public void beforeUpdate(User user) {
System.out.println("Before updating user: " + user.getName());
}
@PostUpdate
public void afterUpdate(User user) {
System.out.println("User updated with ID: " + user.getId());
}
}
Варианты настройки
Использование в сущности:
Методы @PreUpdate и @PostUpdate можно определить непосредственно в сущности.
Использование @EntityListeners:
Для разделения логики можно вынести методы обратного вызова в отдельный класс и использовать @EntityListeners.
Глобальные слушатели:
Для применения логики ко всем сущностям можно зарегистрировать глобальный слушатель через Hibernate.
Пример глобального слушателя:
public class GlobalEntityListener {
@PreUpdate
public void beforeUpdate(Object entity) {
System.out.println("Before updating entity: " + entity.getClass().getSimpleName());
}
@PostUpdate
public void afterUpdate(Object entity) {
System.out.println("Entity updated: " + entity.getClass().getSimpleName());
}
}
Регистрация глобального слушателя в Hibernate:
spring.jpa.properties.hibernate.ejb.event.pre-update=com.example.GlobalEntityListener
spring.jpa.properties.hibernate.ejb.event.post-update=com.example.GlobalEntityListener
#Java #Training #Hard #Spring #SpringDataJPA #PreUpdate #PostUpdate
Что выведет код?
#Tasks
abstract class Shape2103 {
abstract void draw();
}
class Circle2103 extends Shape2103 {
void draw() {
System.out.println("Drawing Circle");
}
}
class Square2103 extends Shape2103 {
void draw() {
System.out.println("Drawing Square");
}
}
public class Task210325 {
public static void main(String[] args) {
Shape2103 shape = new Circle2103();
shape.draw();
((Square2103) shape).draw();
}
}
#Tasks
Варианты ответа:
Anonymous Quiz
39%
Drawing Circle Drawing Square
15%
Drawing Circle
3%
Drawing Square
42%
Drawing Circle ClassCastException
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Какой тип данных используется для хранения одного символа?
Какой тип данных используется для хранения одного символа?
Anonymous Quiz
2%
String
2%
int
92%
char
4%
byte
Аннотации @PreRemove и @PostRemove
Аннотации @PreRemove и @PostRemove используются в Java Persistence API (JPA) для указания методов обратного вызова (callback), которые выполняются до и после удаления сущности из базы данных. Они находятся в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
@PreRemove: Метод, аннотированный @PreRemove, вызывается перед тем, как сущность будет удалена из базы данных (перед выполнением remove).
@PostRemove: Метод, аннотированный @PostRemove, вызывается после того, как сущность была успешно удалена из базы данных (после выполнения remove).
Эти аннотации полезны для выполнения дополнительной логики, например, очистки зависимых данных, логирования или отправки уведомлений, до или после удаления сущности.
Параметры и настройки
Аннотации @PreRemove и @PostRemove не принимают параметров. Они применяются к методам сущности, которые должны быть вызваны в соответствующий момент жизненного цикла сущности.
Требования к методам:
Метод должен быть void и не принимать параметров.
Метод может иметь любой модификатор доступа (public, protected, private).
Метод не должен быть статическим.
Пример использования:
Жизненный цикл
@PreRemove:
Вызывается перед выполнением операции remove в EntityManager.
Используется для выполнения действий перед удалением, например, очистки зависимых данных или валидации.
Пример: удаление связанных записей в других таблицах, проверка условий удаления.
@PostRemove:
Вызывается после успешного выполнения операции remove и фиксации транзакции.
Используется для выполнения действий после удаления, например, логирования или отправки уведомлений.
Пример: логирование ID удаленной сущности, отправка события в систему сообщений.
Кастомизация событий:
Если требуется более сложная обработка событий, можно использовать @EntityListeners для определения слушателей сущностей.
Пример использования @EntityListeners:
Варианты настройки
Использование в сущности:
Методы @PreRemove и @PostRemove можно определить непосредственно в сущности.
Использование @EntityListeners:
Для разделения логики можно вынести методы обратного вызова в отдельный класс и использовать @EntityListeners.
Глобальные слушатели:
Для применения логики ко всем сущностям можно зарегистрировать глобальный слушатель через Hibernate.
Пример глобального слушателя:
Регистрация глобального слушателя в Hibernate:
#Java #Training #Hard #Spring #SpringDataJPA #PreRemove #PostRemove
Аннотации @PreRemove и @PostRemove используются в Java Persistence API (JPA) для указания методов обратного вызова (callback), которые выполняются до и после удаления сущности из базы данных. Они находятся в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
@PreRemove: Метод, аннотированный @PreRemove, вызывается перед тем, как сущность будет удалена из базы данных (перед выполнением remove).
@PostRemove: Метод, аннотированный @PostRemove, вызывается после того, как сущность была успешно удалена из базы данных (после выполнения remove).
Эти аннотации полезны для выполнения дополнительной логики, например, очистки зависимых данных, логирования или отправки уведомлений, до или после удаления сущности.
Параметры и настройки
Аннотации @PreRemove и @PostRemove не принимают параметров. Они применяются к методам сущности, которые должны быть вызваны в соответствующий момент жизненного цикла сущности.
Требования к методам:
Метод должен быть void и не принимать параметров.
Метод может иметь любой модификатор доступа (public, protected, private).
Метод не должен быть статическим.
Пример использования:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@PreRemove
private void beforeRemove() {
System.out.println("Before removing user: " + this.name);
// Логика перед удалением
}
@PostRemove
private void afterRemove() {
System.out.println("User removed with ID: " + this.id);
// Логика после удаления
}
}
Жизненный цикл
@PreRemove:
Вызывается перед выполнением операции remove в EntityManager.
Используется для выполнения действий перед удалением, например, очистки зависимых данных или валидации.
Пример: удаление связанных записей в других таблицах, проверка условий удаления.
@PostRemove:
Вызывается после успешного выполнения операции remove и фиксации транзакции.
Используется для выполнения действий после удаления, например, логирования или отправки уведомлений.
Пример: логирование ID удаленной сущности, отправка события в систему сообщений.
Кастомизация событий:
Если требуется более сложная обработка событий, можно использовать @EntityListeners для определения слушателей сущностей.
Пример использования @EntityListeners:
@Entity
@EntityListeners(UserListener.class)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
public class UserListener {
@PreRemove
public void beforeRemove(User user) {
System.out.println("Before removing user: " + user.getName());
}
@PostRemove
public void afterRemove(User user) {
System.out.println("User removed with ID: " + user.getId());
}
}
Варианты настройки
Использование в сущности:
Методы @PreRemove и @PostRemove можно определить непосредственно в сущности.
Использование @EntityListeners:
Для разделения логики можно вынести методы обратного вызова в отдельный класс и использовать @EntityListeners.
Глобальные слушатели:
Для применения логики ко всем сущностям можно зарегистрировать глобальный слушатель через Hibernate.
Пример глобального слушателя:
public class GlobalEntityListener {
@PreRemove
public void beforeRemove(Object entity) {
System.out.println("Before removing entity: " + entity.getClass().getSimpleName());
}
@PostRemove
public void afterRemove(Object entity) {
System.out.println("Entity removed: " + entity.getClass().getSimpleName());
}
}
Регистрация глобального слушателя в Hibernate:
spring.jpa.properties.hibernate.ejb.event.pre-remove=com.example.GlobalEntityListener
spring.jpa.properties.hibernate.ejb.event.post-remove=com.example.GlobalEntityListener
#Java #Training #Hard #Spring #SpringDataJPA #PreRemove #PostRemove
Всем доброе утро! ☀️
Мы дожили до очередных выходных, что не может не радовать🤪
Наряженная рабочая неделя окончена и можно расслабиться...
Завтра встречу организуем, но тему еще не придумал))) Думаю что-то сообразим✌️
Пишите как Вы проводите выходные?👀
А всем остальным - просто хороших выходных!🍻
Мы дожили до очередных выходных, что не может не радовать
Наряженная рабочая неделя окончена и можно расслабиться...
Завтра встречу организуем, но тему еще не придумал))) Думаю что-то сообразим
Пишите как Вы проводите выходные?
А всем остальным - просто хороших выходных!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
А как вы попали на наш канал?🧐
Anonymous Poll
24%
Ютуб
0%
Rutube
24%
JavaRush
24%
В поиске нашел
4%
Друзья посоветовали
11%
Я БЫЛ ЗДЕСЬ ВСЕГДА!
4%
😮 Что это за канал???
7%
Мой вариант в комментариях!
Какая из рубрик канала Вам нравится больше? 🧐
Anonymous Poll
50%
📝 Обучающие статьи
61%
🕯 Задачки
37%
🆒 Мемы от Андрея
26%
📣 Факты и биографии
42%
🎙 Вопросы с интервью
32%
🚨 Встречи по выходным и видео
5%
‼️ СВОЙ ВАРИАНТ В КОММЕНТАХ!
Всем привет! 🖐
Сегодня встречаемся в 16:00 по МСК, в Яндекс.Телемост, как всегда!
Сегодня рассмотрим аннотацию @Transactional и все что с ней связано.
Рассмотрим:
🔜 что такие транзакции и для чего они нужны.
🔜 настройки, возможности, атрибуты.
🔜 нюансы использования.
Жду всех, как всегда! ✊
Сегодня встречаемся в 16:00 по МСК, в Яндекс.Телемост, как всегда!
Сегодня рассмотрим аннотацию @Transactional и все что с ней связано.
Рассмотрим:
Жду всех, как всегда! ✊
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Теперь мы знаем аннотацию @Transactional.
Встреча от 23.03.2025
Запись встречи -
YOUTUBE
RUTUBE
На сегодняшней встрече мы разобрали аннотацию @Transactional:
🔜 Зачем нам вообще нужна @Transactional
🔜 Варианты настроек, свойств.
🔜 Написали код, потестили и посмотрели как это работает.
Ссылка на Git - https://github.com/Oleborn/TransactionReserch.git
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Всем хорошего настроения и терпения при просмотре!🍸
Встреча от 23.03.2025
Запись встречи -
YOUTUBE
RUTUBE
На сегодняшней встрече мы разобрали аннотацию @Transactional:
Ссылка на Git - https://github.com/Oleborn/TransactionReserch.git
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Всем хорошего настроения и терпения при просмотре!
Please open Telegram to view this post
VIEW IN TELEGRAM