Je construis une nouvelle application Web et j'utilise le printemps, la JPA / Hibernate et les Postgres. Certaines de mes tables ont créé des colonnes création_TS et LastUpdate_TS qui sont des colonnes horodaques qui suivent lorsqu'un insert s'est produit et lorsque la dernière mise à jour s'est produite sur une ligne.
J'utilise également une convention de dénomination pour les colonnes de mes tables afin de concevoir de la conception. Politique Chaque tableau est garanti d'avoir deux colonnes pkkey, une clé de substitution entier et une version de verrouillage optimiste. P>
J'ai deux façons de garder ces champs à jour. P>
< Strong> Option A: Utilisez des déclencheurs forts> p>
C'est la solution que j'ai en place en ce moment, j'ai deux postgres déclencheurs qui incendient sur Insérer et mettre à jour et conserveront ces champs à jour. et j'ai deux classes. p> et j'ai p> Dans cette option, j'utiliserais des auditeurs JPA pour garder les colonnes horodatées à jour. P> Laquelle de ces deux approches est meilleure? Comme je vois des choses ici, c'est ma liste personnelle des avantages et des inconvénients de chaque option et je suis très intéressé d'entendre l'expérience des autres avec ces deux choix. P> Option A Avantages: P> option un inconvénient: p> Option B Avantages: P> Option B Inconfection: P> Comment résoudre ce problème pour une nouvelle application dans laquelle vous avez le contrôle total sur la base de données et le code Java. P> P>
3 Réponses :
doit faire une sélection après l'insertion et la mise à jour pour lire les valeurs que les déclencheurs mises en place. P> blockQuote>
Vous pouvez utiliser
insérer ... renvoyer code> ou
Mise à jour ... renvoyer code> pour récupérer les valeurs modifiées par la gâchette. Il n'est donc pas nécessaire de faire un autre Sélectionnez. P>
En dehors de cela, je dirais que cela dépend de votre environnement. Si l'application est critique de mission et échouera lamentablement si ces colonnes ne sont pas maintenues correctement, alors je collerais avec les déclencheurs. p>
Si cela ne correspond que de commodité à l'avant (et il peut gérer des conflits en raison de valeurs incorrectes gracieusement), l'approche JPA est probablement plus facile à maintenir. p>
Pourriez-vous s'il vous plaît fournir quelques détails pour insérer ... renvoyer code> et
Mise à jour ... retourner code>? Où puis-je trouver des informations sur ceux-ci?
@Skarkalykov: Voir les exemples du manuel: Postgresql.org/ Documents / actuels / statiques / sql-insert.html # AEN78304
OK, je pensais que si c'est une fonctionnalité JPA. Trouvé de cette façon en JPA: do x = em.merge (x); em.flush (); em.Reload (x); code>
danger d'horloge oblique à incliner dans le cluster p> blockQuote>
Je dirais de ne pas m'inquiéter. Cela peut échouer dans le cluster juste comme s'il pouvait échouer dans la base de données. Dans un environnement de production approprié, vous auriez vos propres serveurs NTP et votre cluster se synchronise avec cela. p>
Je préfère généralement tout garder en Java, comme un lieu centralisé pour "logique" est souhaitable (pour moi). Placer la logique dans les déclencheurs est acceptable si vous avez des applications non Java qui le consomment. p>
J'utilise actuellement l'option A (avec tous vos cadres et postgreSQL également) de la manière suivante: Si vous utilisez la colonneFinition comme écrit dans le code que vous ne voulez pas Doit sélectionner l'objet à nouveau ni écrire un code pour définir la date de vos objets. Je n'ai jamais utilisé les rappels JPA autres que pour connecter le cadre d'envers, mais je peux dire que cela semble trop d'effort pour définir la date d'objets spécifiques. P> P>
Quelle solution a choisi Finnaly? Quels sont vos commentaires? Je suis confronté au problème: Stackoverflow.com/Questtions/11136042/ Triggers-Versus-JPA-Eve NT