Единственный сценарий, где hibernate требует интерфейсов, - это коллекции.Это потому, что hibernate использует свои собственные реализации коллекций для отложенной загрузки - PersistentBag
, PersistentSet
и т. Д. И присваивает их вашим полям.Реализации содержат ссылку на сеанс, чтобы они могли заполнять свои данные всякий раз, когда это необходимо.
Hibernate может назначить PersistentSet
на private Set<Foo> set;
(они делают это с отражением), но это невозможно сделатьдля private HashSet<Foo> set;
, поскольку PersistentSet
не расширяется HashSet
Что касается ленивых @*ToOne
ассоциаций - hibernate создает прокси-объект, используя javassist (или cglib), и для него не требуется интерфейс.В любом случае, это редко используемая функция, и прокси является подклассом реального объекта, поэтому, если вы не используете getclass()
(что не следует делать), он работает нормально.