Есть аргументы для обоих, но большинство из них проистекают из определенных пользовательских требований "что делать, если вам нужно добавить логику для", или "инкапсуляция xxxx нарушает". Тем не менее, никто действительно не прокомментировал теорию и дал должным образом аргументированный аргумент.
Что на самом деле делает Hibernate / JPA, когда сохраняет объект - ну, он сохраняет состояние объекта. Это означает, что хранить его так, чтобы его можно было легко воспроизвести.
Что такое инкапсуляция? Инкапсуляция означает инкапсуляцию данных (или состояния) с помощью интерфейса, который приложение / клиент может использовать для безопасного доступа к данным - поддерживая их согласованность и действительность.
Думайте об этом как MS Word. MS Word поддерживает модель документа в памяти - документы STATE. Он представляет интерфейс, который пользователь может использовать для изменения документа - набор кнопок, инструментов, команд клавиатуры и т. Д. Однако, когда вы решите сохранить (сохранить) этот документ, он сохраняет внутреннее состояние, а не набор нажатий клавиш и щелчки мыши, используемые для его генерации.
Сохранение внутреннего состояния объекта НЕ нарушает инкапсуляцию - иначе вы не совсем понимаете, что такое инкапсуляция и почему она существует. Это действительно похоже на сериализацию объектов.
По этой причине, В БОЛЬШИНСТВЕ СЛУЧАЙ, уместно сохранять ПОЛЯ, а не АКСЕССУАРЫ. Это означает, что объект может быть точно воссоздан из базы данных точно так, как он был сохранен. Он не должен нуждаться в проверке, потому что это было сделано на оригинале, когда он был создан, и до того, как он был сохранен в базе данных (если, не дай бог, вы храните недопустимые данные в БД !!!!). Аналогично, не нужно рассчитывать значения, так как они уже были рассчитаны до сохранения объекта. Объект должен выглядеть так же, как и до сохранения. Фактически, добавляя дополнительные элементы в методы получения / установки, вы фактически увеличиваете риск того, что вы воссоздаете что-то, что не является точной копией оригинала.
Конечно, эта функциональность была добавлена по причине. Могут быть некоторые допустимые варианты использования для сохранения методов доступа, однако они обычно бывают редкими. Примером может быть то, что вы хотите избежать сохранения вычисляемого значения, хотя вы можете задать вопрос, почему вы не вычисляете его по требованию в получателе значения или лениво инициализируете его в получателе. Лично я не могу придумать ни одного хорошего варианта использования, и ни один из ответов здесь действительно не дает ответа «Разработка программного обеспечения».