Ruby on Rails имеет полиморфные отношения, которые действительно полезны для реализации таких функций, как комментирование, тегирование и рейтинг, чтобы назвать несколько. У нас может быть комментарий, тег или рейтинговый класс, который имеет много к одному полиморфному отношению с комментарием, taggable и rateable object. Кроме того, данный объект домена может реализовать любую комбинацию таких отношений. Таким образом, он может, например, быть заметным, taggable и rateable одновременно.Моделирование множественных полиморфных отношений с использованием Hibernate
Я не мог придумать простой способ дублирования этой функции в Hibernate. В идеале, будет класс Comment, который будет иметь отношение «много к одному» с классом Commentable, а класс Commentable будет иметь отношение «один к большому» с комментариями. Это будет идеально, если конкретные классы домена могут наследовать от ряда таких классов, например Commentable и Taggable. Вещи кажутся немного сложными, поскольку класс Java может распространять только один класс, а некоторый код может быть дублирован по нескольким классам.
Я хотел бы знать, какие лучшие методы моделирования таких отношений аккуратно и лаконично используют Hibernate?
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html – Bozho
Обновление: возможно моделировать полиморфное отношение «много-к-одному» от комментария к любому объекту домена используя аннотацию @Any, но моделирование отношения «один ко многим» от этого объекта домена обратно к комментарию приводит к проблемам ограничения внешнего ключа. http://bit.ly/9pPsvk также упоминает, что невозможно указать ограничение FK. Я не вижу обходного пути. Самый близкий рабочий подход, который я нашел, был http://bit.ly/9PfIhR, где у меня есть отдельный подкласс комментариев для каждого объекта комментария, но, по крайней мере, уйти с единой таблицей комментариев. – user299703