2012-04-04 5 views
0

Мне нужна помощь в моделировании набора таблиц/классов в моем проекте. Мне также нужна помощь в том, как сделать сопоставление hibernate для этих таблиц. У меня есть следующие таблицы в моем проекте.Отображение гибернации

  1. Person
  2. Организация
  3. Контакт
  4. Адрес

Person таблица может иметь один или несколько адресов. Организация и контакт могут иметь только один адрес. Поэтому я установил следующие столбцы, чтобы установить связь между таблицами.

Адресная таблица имеет PersonId [Поскольку одно лицо может иметь более одного адреса].

Таблица организации и контакта имеет AddressId [Поскольку эти таблицы могут иметь только один адрес].

  1. Я хочу знать, какие классы java мне нужно создать для этих таблиц. В настоящее время у меня есть классы Person, Address, Organization и Contact. Не знаете, как связать класс Address с классом Person, Organization и Contact.
  2. Я хочу знать, следует ли рассматривать адрес как компонент или сущность. И как создать адрес xml-адреса рассматривается как компонент.
  3. Таблица PersonId в адресе может иметь нулевые значения для записей адресов, созданных для организации и контакта. Мне хорошо с созданием отдельной таблицы [say Person_Address], чтобы сохранить список адресов для человека. Но наличие этой таблицы ссылок может дать положение для многих-многих отношений между таблицами Person и Address. Как в этом случае применять одно-много отношений.
+0

OK. Так что вы пробовали до сих пор? – ManuPK

ответ

1

Я хотел бы пойти на то, что вы предлагаете в 3. Используя OneToMany отношения на множестве адресов в классе Person промежуточный таблица будет создана автоматически, и я предполагаю, что это будет иметь уникальное ограничение на адрес Я бы.

Редактировать: вы получите только ссылку в таблице адресов, если вы добавите в класс адресов соответствующую многозначную аннотацию и используйте и сопоставьте аннотацию «один ко многим» в этом поле. Но так как вы этого не делаете, вы получите таблицу Person_Address даже с отношениями «один ко многим» без создания каких-либо дополнительных классов.

Вы должны моделировать свои классы, как в обычной Java. I.I У человека будет набор адресов, остальные будут иметь только один, а класс Address не будет забывать о других.

Затем вы добавляете примечание @OneToMany в класс Person и класс @OneToOne в других. Или вы помещаете это в свой orm.xml, хотя аннотации намного лучше для обслуживания.

Что касается компонентных/внедряемых vs Entity, я бы предложил объект, поскольку он является самым простым и без ограничений. Не используйте сразу несколько понятий и придерживайтесь главной дороги.

+0

Обычно это плохая форма для таблицы, где есть ссылки на другие таблицы, которые иногда являются нулевыми. Я утверждаю ответ Барсу, потому что Hibernate может справиться с ограничением отношений «один ко многим». Тем не менее, отношения «многие ко многим» не будут проблемой, по всей вероятности.Если две организации имеют один и тот же адрес, не должны ли эти объекты указывать на один и тот же объект? –

+0

@NathanielFord: Я бы рассматривал ваш пример как исключительный случай и скорее имел бы дублирование адреса в этом случае. Что делать, если одна из организаций движется. Вы рискуете изменить адрес обоих из них. И это, как правило, поле, в котором я бы использовал Cascade, который не будет работать со многими-ко-многим. Со многими-ко-многим вы получите много лишних накладных расходов. – barsju

Смежные вопросы