Отображение Hibernate в 2 разных таблицах Java-сущностей с наследованием между ними - PullRequest
0 голосов
/ 27 декабря 2010

Я работаю над проблемой отображения наследования Hibernate, для которой не могу найти ответ.

У меня есть 2 класса:

Child extends Parent

, и я сопоставил их обе, как если бы они были двумя разными моделями, просто используя файлы 2 hbm, без наследования, просто <class>элемент.Это означает, что hbm для потомка повторяет поля, определенные в hbm для родителя.

Причина этого в том, что я хотел, чтобы они были полностью независимыми, потому что у дочерних элементов есть ограничения, отличные от родительских, поэтому они сопоставлены с двумя разными таблицами как две разные модели, они просто оказываются дочерними.родитель в Java.

Проблема теперь в том, что запросы не ведут себя независимо - Hibernate знает, что 2 java-класса имеют отношение наследования между ними, поэтому, когда я пытаюсь получить экземпляры Child, но Hibernate находит 2 разработчика для негои возвращает результаты из обеих таблиц.

Я знаю, что это довольно странный случай использования, но если у кого-то есть какие-либо предложения, которые не включают просто удаление наследства между Child и Parent (что я рассматриваю, еслиЯ не могу найти другое решение), я бы сначала попробовал что-то другое.

1 Ответ

0 голосов
/ 27 декабря 2010

Позвольте мне предшествовать этому ответу с предупреждением, что

  • Похоже, что может быть лучший способ, чем наследование, если вы пытаетесь выполнить эти запросы
  • Даже если вы исправите эти запросы, у вас могут возникнуть другие проблемы

При этом не следует дифференцировать результаты запросов по наследованию, как это. Это не нормальное использование. Обычно результаты запроса должны основываться на полях в таблице. Я бы предложил создать логическое поле isChild, для которого дочерний конструктор устанавливает true, а родительский конструктор - false. Затем вы можете просто запросить все объекты на основе этого поля, чтобы получить всех родителей или всех детей.

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