Используя аннотации, вы довольно плотно связываете свою модель (сущности) со средой Hibernate (вы вводите связь между ними).С другой стороны, ваш исходный код становится намного более читабельным, поскольку вам не нужно переключаться между XML-файлами и исходными файлами Java.
Изначально Hibernate поддерживал только отображения XML, и аннотации были добавлены позже (после того, как они были введены в Java 5).Большинство Java-разработчиков сильно одобряют аннотации, поскольку они действительно дают понять, что класс представляет сущность Hibernate, какие у него есть ограничения и как он связан с другими сущностями в приложении.С другой стороны, использование определений XML отделяет ваш источник от Hibernate, и вы можете легко переключаться на другую библиотеку, не изменяя источники Java.Тем не менее, вы бы сделали намного лучше, если бы использовали Java Persistence API и его переносимые аннотации.Это дает возможность использовать унифицированный API ORM, который может делегировать любую инфраструктуру ORM (Hibernate, ibatis, EclipseLink и т. Д.).Переключение между фреймворками легко, как изменение в конфигурации JPA в режиме онлайн и добавление нового ORM в путь к классам ваших проектов.На практике очень немногие компании используют Hibernate напрямую (если только им не нужны некоторые его уникальные функции) - он обычно используется в сочетании с JPA.Очень немногие люди также используют определения сущностей XML - я давно не работал с ними над проектом.