web-dev-qa-db-fra.com

@PreUpdate et @Prepersist en hibernate / JPA (en utilisant la session)

J'ai rencontré un bloqueur en ajoutant un correctif à un projet existant. Le principal problème est que j'aimerai utiliser @Prepersist et @PreUpdate dans le POJO pour prendre soin du champ LastModified (insérer et mettre à jour) à l'aide de l'implémentation hibernate de JPA avec session.

Raison?: Cette modification est requise car il est nécessaire d'utiliser liquibase 1.9.5 et je sais (puisque j'y ai déjà fait face) que liquibase traduit l'horodatage lié à datetime avec le courant_timestamp par défaut, et c'est trop mauvais pour la base de données mysql.

J'ai donc eu besoin d'un moyen d'avoir cet ensemble dans le code plutôt que dans la base de données afin que je puisse changer en toute sécurité le champ d'horodatage en datetime.alors la base de données est heureuse, je suis heureux.

Maintenant, il semble que ces interprètes ne soient pas exécutés, avec peu de recherche, j'ai découvert qu'il est approprié d'utiliser entityManager. C'est actuellement hors de question.J'aimerais donc savoir s'il y a un SIMPLE contournement de mon problème, ce qui signifie avoir @Prepersist ou @PreUpdate ou même une autre solution pour définir le champ lastModified en utilisant toujours session

34
black sensei

Maintenant, il semble que ces interprètes ne soient pas exécutés, avec peu de recherche, j'ai découvert qu'il est approprié d'utiliser entityManager.

Oui, les rappels JPA ne fonctionneront pas si vous utilisez l'API Session.

Je voudrais donc savoir s'il existe un moyen SIMPLE de contourner mon problème, ce qui signifie avoir @PrePersist ou @PreUpdate ou même une autre solution pour définir le champ lastModified en utilisant toujours session

À ma connaissance, il n'y a pas de moyen simple (si vous utilisez Spring, [~ # ~] peut-être [~ # ~] jetez un œil à ce post cependant).

Ma suggestion pour une solution basée sur Hibernate serait d'utiliser événements (et une ou plusieurs interface (s)). Vérifiez Mise en veille prolongée et date de dernière modification pour un exemple.

48
Pascal Thivent