Какие таблицы должны быть определены как дискриминируемые объекты в Hibernate? - PullRequest
0 голосов
/ 08 июля 2010

Я хочу разработать систему блогов и галерей изображений. Моя схема базы данных нравится ниже;

ИЗОБРАЖЕНИЕ {таблица} | СТАТЬЯ {таблица} | COMMENT {таблица}
------------------- | ------------------------ | ----- ------------------
PK id; | PK id; | PK id;
PATH String; | FULLTEXT Строка | ENTITY_ID {IMAGE_ID, ARTICLE_ID}
| | ENTITY_TYPE Enum {ИЗОБРАЖЕНИЕ, СТАТЬЯ, КОММЕНТАРИЙ}

НРАВИТСЯ {таблица}
-------------------------------------------------- ---------------- |
PK id; |
ENTITY_ID {IMAGE_ID, ARTICLE_ID} |
ENTITY_TYPE Enum {IMAGE, ARTICLE, COMMENT} |

Так как я могу создавать модели? Я думаю, что должны быть определены дискриминационные объекты, но какие объекты; Сущность: подклассы {IMAGE, ARTICLE} или комментарий: подклассы {ArticleComment, ImageComment} / Like: SubClasses {ImageLike, ArticleLike}?

Ответы [ 2 ]

0 голосов
/ 12 июля 2010

Использование любой аннотации для особых случаев решает то, что мне нужно ( Как использовать аннотации, связанные с Hibernate @ Any? ). но он не поддерживает двунаправленное отображение. Мне трудно использовать отображение по наследованию. ( Как я могу сделать двунаправленное отображение по аннотированному свойству @Any? )

0 голосов
/ 08 июля 2010

Вы можете использовать столбец дискриминатора для разных подклассов сущностей, используемых при использовании стратегии «Таблица на иерархию».Они используют одну таблицу со ВСЕМИ столбцами для каждого поля в таблице.

Продолжая по этому маршруту:

Итак, если у вас есть Image и Article подклассы некоторой общей сущности, возможно, PostObject, ваша таблица будет выглядеть следующим образом:

POST_OBJECT [Table]
-------------------
id
POST_TYPE (this is the discriminator column, defined as IMAGE, ARTICLE, COMMENT)
COMMENT_ID
PATH
FULLTEXT
... 

LIKES [Table] 
-------------------
id
POST_OBJECT_ID_fk

После этого вы можете иметь внешний ключ для идентификатора POST_OBJECT в вашей таблице COMMENT.

Я бы предостерег вас, чтобы вы должным образом учли отношения между сущностями.То, что у вас есть выше, скорее всего, приведет к объектам Comment, Article, Image и Like.

То, что вы показали, более близко напоминает таблицу для конкретного класса.Плюс: более нормализованный макет Кон: больше соединений

Я бы посоветовал проверить документацию Hibernate на плюсы и минусы каждого, чтобы вы могли принять более обоснованное решение: http://docs.jboss.org/hibernate/core/3.5/reference/en/html/inheritance.html#inheritance-tableperclass

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...