Вопрос ORM - JPA - PullRequest
       10

Вопрос ORM - JPA

1 голос
/ 28 июня 2010

Я читаю Pro JPA 2. Обсуждение книги начинается с обсуждения ORM на первых нескольких страницах.

В нем говорится о сопоставлении одного Java-класса с именем Employee со следующими переменными экземпляра - id, name, startDate, salary.

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

таблица A: emp id - первичный ключ STARTDATE

таблица B: emp_sal id - первичный ключ в этой таблице, который также является внешним ключом, ссылающимся на столбец 'id' в таблице A.

Таким образом, представляется, что сохранение экземпляра Employee в базе данных потребует операций с двумя (несколькими) таблицами.

Должен ли класс Employee иметь переменную экземпляра 'salary'?

Я думаю, что он, возможно, должен принадлежать отдельному классу (может быть, оклад класса?), Представляющему оклад, и, таким образом, пример не кажется очень интуитивным.

Что мне здесь не хватает?

1 Ответ

1 голос
/ 28 июня 2010

Во-первых, автор объясняет, что существует множество способов представлять класс в базе данных: иногда сопоставление класса с таблицей является простым, иногда у вас нет прямого соответствия между атрибутами и столбцы, иногда один класс представлен несколькими таблицами:

В сценарии (C) таблица EMP имеет была разделена так, чтобы зарплата информация хранится в отдельном Таблица EMP_SAL. Это позволяет администратор базы данных, чтобы ограничить ВЫБЕРИТЕ доступ к информации о зарплате те пользователи, которые искренне нуждаются в этом. С таким отображением даже одного операция сохранения для класса Employee теперь требует вставки или обновления до двух разные таблицы.

Так что даже сохранение данных из одного класса в базе данных может быть сложной задачей .

Затем он описывает, как отношения различны. На модели уровня объекта вы пересекаете объекты через их отношения. На уровне реляционной модели вы используете внешние ключи и объединения (иногда через таблицу соединений, которая даже не существует на уровне объектной модели).

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

Другими словами, не существует прямого и уникального соответствия между объектной моделью и реляционной моделью. Оба полагаются на разные парадигмы, и подгонка не идеальна. Разница между ними известна как несоответствие импеданса , с которым ORM приходится иметь дело (что позволяет сопоставить объектную модель и множество возможных представлений в реляционной модели). И это то, о чем весь раздел вы читаете. Это также то, что вы пропустили:)

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