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.
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). –