2025-01-30
Source | |
Branch |
|
Java |
|
Docker |
|
Le cycle de vie d’une entité JPA définit les différents états possibles d’une instance (New
, Managed
, Detached
, Removed
) et les transitions entre ces états via les opérations de l’EntityManager (persist()
, merge()
, remove()
, detach()
), permettant ainsi le suivi et la gestion de la synchronisation entre les objets Java en mémoire et leur représentation en base de données.
Comme le cycle de vie des entités géré par JPA, des annotations spécifiques sont proposées pour exécuter des méthodes de Callback d’une entités à des moments spécifiques :
@PrePersist
: avant persist()
@PostPersist
: après persist()
@PreUpdate
: avant modification@PostUpdate
: après modification@PreRemove
: avant suppression@PostRemove
: après suppression@PostLoad
: après chargementDéfinir un ou des Listener
: des classes dédiées à la réaction aux évènements du cycle de vie d’une entités.
@Slf4j
public class EntityMonitorListener {
@PrePersist
@PreUpdate
@PreRemove
private void beforeAnyUpdate(Object entity) {
log.info("-->about to change in DB: " + entity);
}
@PostPersist
@PostUpdate
@PostRemove
private void afterAnyUpdate(Object entity) {
log.info("--> changed in DB" + entity);
}
@PostLoad
private void afterLoad(Object entity) {
log.info("--> loaded from DB: " + entity);
}
}
Les associer à une ou plusieurs entités (@EntityListeners
).
@Entity
@Table(name = "CUSTOMER_BIS")
@EntityListeners(EntityMonitorListener.class)
@Getter
@Setter
@ToString
@RequiredArgsConstructor(staticName = "of")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Slf4j
public class CustomerWithListener {
@Id
@GeneratedValue
private long id;
@NonNull
private String name;
}
E. Bruno - Le cycle de vie des entités JPA