J'ai une entité avec des champs lorsque j'essaie de mettre à jour avec Spring-Data-JPA , j'observe Edit_Count a été incrémenté, mais Edit_TimeStamp reste la même. Si j'invoque manuellement SQL P> @PreUpdate
protected void onUpdate() {
editTimestamp = new Date();
}
3 Réponses :
Parce que dans votre ensemble initial d'annotations, tout ce que vous avez dit sur la colonne EDIT_TIMESTAMP est qu'il s'agit d'un horodatage; JPA ne sait pas que cela doit le mettre à jour. Je suppose que lorsque vous exécutez manuellement l'instruction SQL, vous avez une sorte de déclencheur sur la mise à jour qui change ces champs pour vous - mais sont écrasés par les données provenant de l'entité persistée lorsque vous le mettez à jour.
Si vous n'avez pas besoin du comte / horodatage modifié, essayez de les supprimer de l'entité et de voir si cela fonctionne. Sinon, vous avez une solution de travail. P>
Vous devez modifier l'annotation de la colonne pour inclure Mise à jour = Faux. Cela provoquera que la colonne EDIT_TIMESTAMP n'apparaît pas dans la mise à jour SQL, le fournisseur JPA n'inclut pas la valeur actuelle du champ, ce qui est ce qui la fait remplacer par défaut.
@Temporal(TemporalType.TIMESTAMP) @Column(name = "edit_timestamp", updatable = false, columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP") private Date editTimestamp;
Cela fonctionne en partie. Avec Updatable = FALSE, la colonne EDIT_TIMESTAMP ne figure pas dans la requête de mise à jour. À partir de la base de données, j'ai observé que Edit_TimeStamp a été mis à jour. Toutefois, le getter pour EditMESTAMP n'est pas au courant de la valeur mise à jour, car elle n'est pas déclenchée par @Preupdate, elle renvoie donc toujours l'ancienne valeur.
Bonjour, je voulais savoir si je peux définir l'horodatage actuel sur la création mais sur la mise à jour, je veux qu'il reste la même chose.
@Leechekiam Comment résoudre ce problème, supprimer simplement updatable = false code> semble ne peut pas fonctionner
Vous pouvez marquer les variables comme mise à jour ou création des horodatages dans votre entité. Dans l'exemple suivant, vous pouvez voir comment cela peut être fait très facilement en utilisant des annotations Hibernate: juste pour la référence et pour vous assurer qu'il n'y a pas de confusion, j'utilise les importations de package suivantes pour Les types de données et annotations respectifs: p>
Pour descendre, veuillez fournir votre commentaire ...