Java | Фишки и трюки
7.21K subscribers
182 photos
29 videos
6 files
40 links
Java: примеры кода, интересные фишки и полезные трюки

Купить рекламу: https://telega.in/c/java_tips_and_tricks

✍️По всем вопросам: @Pascal4eg
Download Telegram
⌨️ События жизненного цикла объекта JPA

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

JPA определяет семь событий жизненного цикла:

@PrePersist - перед тем, как вызывается persist для нового объекта

@PostPersist - после того, как вызывается persist для нового объекта

@PreRemove - прежде чем сущность будет удалена

@PostRemove - после удаления объекта

@PreUpdate - перед операцией обновления

@PostUpdate - после обновления сущности

@PostLoad - после загрузки объекта

Итак, если мы создаем новую сущность и вызываем метод сохранения нашего репозитория, вызывается наш метод, аннотированный @PrePersist, затем запись вставляется в базу данных и, наконец, вызывается наш метод @PostPersist. Если мы используем @GeneratedValue для автоматической генерации наших первичных ключей, мы можем ожидать, что этот ключ будет доступен в методе @PostPersist.

Для операций @PostPersist, @PostRemove и @PostUpdate в документации упоминается, что эти события могут произойти сразу после выполнения операции или в конце транзакции.

Следует отметить, что обратный вызов @PreUpdate вызывается только в том случае, если данные действительно изменяются, то есть если необходимо выполнить фактический оператор обновления SQL. Обратный вызов @PostUpdate вызывается независимо от того, действительно ли что-то изменилось.

Если какой-либо из наших обратных вызовов для сохранения или удаления объекта выдаст исключение, транзакция будет отменена.


@Entity
public class User {
private static Log log = LogFactory.getLog(User.class);

@Id
@GeneratedValue
private int id;

private String userName;
private String firstName;
private String lastName;
@Transient
private String fullName;

// getter and setter

@PrePersist
public void logNewUserAttempt() {
log.info("Attempting to add new user with username: " + userName);
}

@PostPersist
public void logNewUserAdded() {
log.info("Added user '" + userName + "' with ID: " + id);
}

@PreRemove
public void logUserRemovalAttempt() {
log.info("Attempting to delete user: " + userName);
}

@PostRemove
public void logUserRemoval() {
log.info("Deleted user: " + userName);
}

@PreUpdate
public void logUserUpdateAttempt() {
log.info("Attempting to update user: " + userName);
}

@PostUpdate
public void logUserUpdate() {
log.info("Updated user: " + userName);
}

@PostLoad
public void logUserLoad() {
fullName = firstName + " " + lastName;
}
}


#java #Entity #Lifecycle
Please open Telegram to view this post
VIEW IN TELEGRAM
👍134🔥1