2010-08-12 2 views
23

Pourquoi une classe d'entité dans JPA ne peut-elle pas être finale ou avoir une méthode finale? Citant de here -Pourquoi la classe d'entité en JPA n'est-elle pas définitive?

Une classe d'entité doit suivre les exigences suivantes:

...

La classe ne doit pas être déclarée final. Aucune méthode ou variable d'instance persistante ne doit être déclarée final.

Quelle est la raison? Est-ce que JPA sous-classe les classes d'entités et redéfinit les méthodes?

+0

Question similaire [Fournisseur de persistance pour Java prenant en charge les champs finaux] (http://stackoverflow.com/questions/2455906/persistence-provider-for-java-that-supports-final-fields). –

Répondre

27

Par définition, une entité est une classe qui peut être conservée dans une base de données, donc avoir un champ final n'aurait aucun sens dans le contexte de quelque chose qui finira par être un enregistrement dans votre base de données. L'exigence de l'absence de classe finale et pas de méthodes finales a à voir avec la façon dont les implémentations de JPA traitent réellement les instances persistantes de vos classes d'entités.

Il est courant pour les implémentations de sous-classer votre classe lors de l'exécution et/ou d'ajouter dynamiquement du code d'octet à vos classes, afin de détecter quand une modification d'un objet entité a eu lieu. Si votre classe est déclarée comme définitive, alors ce ne serait pas possible. Il y a bien sûr beaucoup plus de raisons que celles-ci: voici un article qui donne plus d'informations sur la façon dont ORM fonctionne en général derrière les couvertures, ce qui pourrait vous aider à mieux comprendre les autres exigences pour les entités JPA.

+0

Merci! Je connaissais les champs finaux, mais je n'étais pas sûr des méthodes/classes finales. –

+0

De rien;) –

+4

Notez que * charger * les classes immuables d'une base de données est parfaitement logique. –

Questions connexes