J'essaye de mettre à jour le code d'hibernation qui a été écrit par quelqu'un d'autre dans le passé et qui court dans le problème de désérialisation. La façon dont le code original a été écrit, il n'a pas explicitement déclaré serialVersionUID et juste mis en œuvre l'interface Serializable -Hibernate Deserialization Édition
public class SamplePOJO implements Serializable {
Maintenant, je suis en train d'ajouter une nouvelle colonne à la table et la carte à cet objet. I:
- table modifiée pour créer nouvelle colonne
- Mise à jour l'objet d'inclure un nouvel objet String et getter/setter pour cela, et
- Mise à jour le fichier .hbm à la carte de la colonne de la table db avec le objet.
Cependant, quand je le lance après la compilation je reçois l'erreur suivante -
"Error while deserializing from byte[]., caused by x.y.SamplePOJO; local class incompatible: stream classdesc serialVersionUID = 7997933458932550222, local class serialVersionUID = <other number internally auto generated as source didn't explicitly mention serialVersionUID>"
Si je mets à jour le code pour inclure le serialVersionUID qui correspond à celui jeté dans l'erreur ci-dessus, il exécute sans problèmes. D'après les informations que j'ai trouvées, la cause la plus fréquente semble être les différents pots d'hibernation dans le client et le serveur. Cependant, ce n'est pas le cas ici car il utilise le même pot d'hibernation. Quelqu'un pourrait-il aider s'il y a un moyen de résoudre ce problème sans avoir à mentionner spécifiquement le serialVersionUID qui est levé pendant l'exception? De plus, si je dois m'en tenir à cette approche et si mon code passe à un autre environnement (qa/prod), s'attendrait-il à un serialVersionUID différent selon la façon dont il est sérialisé dans d'autres environnements?
J'apprécierai toute aide!
Merci. Vous avez clarifié mon doute. – JUG