web-dev-qa-db-fra.com

Les classes de table Hibernate doivent-elles être sérialisables?

J'ai hérité d'un projet de portail Websphere qui utilise Hibernate 3.0 pour se connecter à une base de données SQL Server.

Il y a environ 130 classes de table Hibernate dans ce projet. Ils implémentent tous Serializable. Aucun d'eux ne déclare un champ serialVersionUID, donc Eclipse IDE affiche un avertissement pour toutes ces classes.

Existe-t-il un réel besoin pour ces classes d'implémenter Serializable?
Si c'est le cas, existe-t-il un outil pour ajouter un champ serialVersionUID généré à un grand nombre de classes à la fois (juste pour faire disparaître les avertissements)?

46
Scott Leis

Existe-t-il un réel besoin pour ces classes d'implémenter Serializable?

La spécification JPA (JSR 220) le résume assez bien (il en va de même pour Hibernate):

2.1 Exigences concernant la classe d'entité

(...)

Si une instance d'entité doit être passée par valeur en tant qu'objet détaché (par exemple, via une interface distante), la classe d'entité doit implémenter l'interface Serializable.

Donc, à strictement parler, ce n'est pas une exigence à moins que vous ayez besoin que des entités détachées soient envoyées via le câble à un autre niveau, à migrer vers un autre nœud de cluster, à être stockées dans la session HTTP, etc.

Si tel est le cas, existe-t-il un outil pour ajouter un champ serialVersionUID généré à un grand nombre de classes à la fois

Je pense que vous pouvez regrouper cela avec les Tâches de version série (Ant) .

60
Pascal Thivent

Hibernate n'a pas du tout besoin d'être sérialisable.

6
bmargulies

La commande " Clean Up " d'Eclipse peut le faire. Cependant, il fait également beaucoup plus, alors testez-le et affinez les paramètres de nettoyage et de format avant de l'utiliser sur un package complet.

5
Chris Nava

Si oui, existe-t-il un outil pour ajouter un champ serialVersionUID généré à un grand nombre de classes à la fois (juste pour faire disparaître les avertissements)?

Vous pouvez désactiver cet avertissement dans les paramètres du compilateur pour Eclipse - pour le projet ou votre espace de travail dans son ensemble.

2
matt b

Je ne suis pas familier avec un outil qui le ferait automatiquement pour un tas de classes, bien que vous puissiez écrire un script.

Si vous le faites mécaniquement avec Eclipse, cela ne devrait pas vous prendre plus de 4 à 5 secondes par classe, ce qui pourrait être encore plus rapide qu'un script.

2
Uri