Есть ли ORM, который поддерживает композицию без соединений - PullRequest
1 голос
/ 05 февраля 2011

РЕДАКТИРОВАТЬ : Изменено название с «наследование» на «состав».Оставленный вопрос остается без изменений.

Мне любопытно, есть ли инструмент ORM, который поддерживает наследование без создания отдельных таблиц, которые должны быть объединены.

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

Эти адреса будут иметь несколько общих значений: адрес 1, адрес 2, город, штат / провинция, почтовый индекс.Допустим, у меня есть класс addressBlock, и я хочу, чтобы клиенты и поставщики наследовали от этого класса и, возможно, от других классов.Но я не хочу, чтобы отдельные таблицы были объединены, я хочу столбцы в таблицах клиентов и поставщиков соответственно.

Существует ли ORM, поддерживающий это?

Ближайший вопрос, который я нашел в StackOverflow, который может быть тем же вопросом, связан ниже, но я не могу понять, если ОП спрашивает, что я спрашиваю.Кажется, он спрашивает о вышеупомянутом наследовании именно потому, что будет несколько таблиц.Я ищу случай, когда вы можете использовать наследование без генерации нескольких таблиц.

Подход наследования модели с ORM

Джанго

1 Ответ

4 голосов
/ 05 февраля 2011

JPA (Java Persistence API, реализованный Hibernate, EclipseLink и другими) поддерживает это: вы должны определить адрес POJO, пометить его как «встраиваемый» и иметь два объекта (Customer и Vendor), каждое из которых имеет поле типа Address (помечен как «встроенный»). Поля адреса клиента будут сопоставлены столбцам в таблице Customer, а поля адреса поставщика будут сопоставлены столбцам в таблице Vendor.

Обратите внимание, что здесь нет наследования. Наследование предназначено для is-a отношений. Продавец - это не адрес, а клиент - тоже не адрес. Тем не менее, есть состав, потому что у поставщика есть адрес, а у клиента есть адрес.

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