В защиту аннотаций (в случае hibernate) простой кейс:
вас в команде много, два девелопера берут разные задачи, каждая из которых предполагает добавление нового поля в сущность и последующую обработку в различных сервисах.
В случае аннотаций каждый добавил аннотированное поле, в случае билдеров запросов + pojo каждый модифицировал билдер
Потом оба делают мерж реквест, в одном из них вылетает мерж конфликт. Конфликт с аннотациями чинится в 2 клика и практически не требует повторного тестирования. Конфликт в билдере требует вдумчивого разруливания и повторного тестирования
В случае с базами данных мне нравится принцип slf4j (The Simple Logging Facade), где вы можете logging заменить на java.util.logging, logback, log4j