Ответ 1
Это действительно зависит от того, как вы кодируете свой домен.
В целом (на Java) я предпочитаю создавать отдельный набор JPA-аннотированных DTO для работы с сохранением. Такие DTO будут соответствовать таблице db и будут использоваться в пользовательском репозитории, который
- предоставит клиентам семантический API
- будет запускать запросы против таких DTO
- будет использовать фабрики для инициализации объектов домена для возврата к клиентам
Этот подход делает модели домена действительно отделенными от схемы db, так что вы можете эволюционировать независимо друг от друга. Недостатки этого подхода заключаются в том, что у вас есть больше кода для написания, но я считаю, что такой код довольно легко и дешево написать поддержку.
Использование аннотации JPA для сущностей является довольно распространенным подходом, но по мере того как ваша модель домена развивается и становится более сложной, мой собственный опыт заключается в том, что вам приходится сталкиваться с проблемами, которые намного дороже, чем другие решения.