Il existe des arguments pour les deux, mais la plupart d'entre eux proviennent de certaines exigences de l'utilisateur "que faire si vous devez ajouter de la logique", ou "xxxx pauses encapsulation". Cependant, personne n'a commenté sur la théorie, et donné un correctement l'argumentation raisonnée.
Qu'est-ce que Hibernate/JPA, en train de faire quand il persiste un objet - eh bien, c'est la persistance de l'ÉTAT de l'objet. Cela signifie que de les stocker dans une manière qu'il peut être facilement reproduit.
Qu'est-ce que l'encapsulation? Dispositifs d'encapsulation des moyens de l'encapsulation des données (ou d'état) avec une interface de l'application/client peut utiliser pour accéder aux données en toute sécurité - homogénéité et valide.
Pensez à cela comme MS Word. MS Word maintient un modèle de document dans la mémoire les documents de l'ÉTAT. Il présente une interface qui permet à l'utilisateur de modifier le document - un ensemble de boutons, les outils, les raccourcis clavier, etc. Toutefois, lorsque vous choisissez de persister (Enregistrer) ce document, il enregistre l'état interne, et non l'ensemble des combinaisons de touches et de clics de souris utilisé pour les générer.
Économiser de l'état interne de l'objet NE peut PAS briser l'encapsulation - sinon vous ne comprenez pas vraiment ce que l'encapsulation signifie, et pourquoi il existe. Il est juste comme objet de la sérialisation vraiment.
Pour cette raison, DANS la PLUPART des CAS, il convient de conserver les CHAMPS et pas les ACCESSEURS. Cela signifie qu'un objet peut être fidèlement recréé à partir de la base de données exactement de la manière dont il a été stocké. Il ne devrait pas avoir besoin de validation, parce que cela a été fait sur l'original quand il a été créé, et avant il a été stocké dans la base de données (sauf si, à Dieu ne plaise, vous êtes le stockage de données non valides dans la DB!!!!). De même, il devrait y avoir aucun besoin de calculer des valeurs, comme ils ont déjà été calculées avant que l'objet a été stocké. L'objet doit regarder juste comme il l'a fait avant, il a été sauvé. En fait, en ajoutant d'autres trucs dans les getters/setters vous sont effectivement augmenter le risque de recréer quelque chose qui n'est pas une copie exacte de l'original.
Bien sûr, cette fonctionnalité a été ajoutée pour une raison. Il peut être valide des cas d'utilisation pour la persistance de la accesseurs, cependant, ils seront généralement rares. Un exemple peut être que vous voulez éviter la persistance d'une valeur calculée, bien que vous pourriez vouloir poser la question de savoir pourquoi vous n'avez pas à calculer sur la demande dans la valeur du getter, ou paresseusement l'initialiser dans la lecture. Personnellement, je ne vois pas de bon de cas d'utilisation, et aucune des réponses ici donne vraiment un "Génie Logiciel" réponse.