Как реализовать наследование с таблицами, имеющими многоколонные / составные первичные ключи (JPA 1.0 @IdClass)? - PullRequest
0 голосов
/ 17 ноября 2010

С учетом следующих таблиц:

CREATE TABLE Employees
(
  first_name VARCHAR(50) NOT NULL,
  last_name VARCHAR(50) NOT NULL,
  birth_date DATE NOT NULL,
  PRIMARY KEY (first_name, last_name)
);

CREATE TABLE Managers
(
  first_name VARCHAR(50) NOT NULL,
  last_name VARCHAR(50) NOT NULL,
  salary INTEGER NOT NULL,
  total_bonus INTEGER NULL,
  PRIMARY KEY (first_name, last_name),
  CONSTRAINT managers_employees_fk FOREIGN KEY (first_name, last_name) REFERENCES Employees (first_name, last_name)
);

CREATE TABLE Workers
(
  first_name VARCHAR(50) NOT NULL,
  last_name VARCHAR(50) NOT NULL,
  wage INTEGER NOT NULL,
  PRIMARY KEY (first_name, last_name),
  CONSTRAINT workers_employees_fk FOREIGN KEY (first_name, last_name) REFERENCES Employees (first_name, last_name)
);

как бы вы реализовали классы сущностей и составного первичного ключа, используя аннотации JPA 1.0 @IdClass?

Подвопросы возникают:

  1. Определяют ли подклассы свои собственные классы идентификаторов?
  2. Если это так, они наследуются от класса ID суперкласса?
  3. Получают ли подклассы аннотации @IdClass?

Обратите внимание, что вопрос намеренно наивен. Я хотел бы видеть объявления классов, свойств с аннотациями доступа к полям без методов получения и установки, вероятно, будет достаточно.

Спасибо

1 Ответ

1 голос
/ 17 ноября 2010

PK определяется в корне дерева наследования.Корень определяет все.

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

...