Объединение @MappedSuperclass и @SecondaryTable - это разрешено? - PullRequest
3 голосов
/ 01 февраля 2012

Работа над комплектом соответствия JPA 2.0 для моей стажировки.Часть этого комплекта предназначена для покрытия угловых случаев.

@MappedSuperclass не имеет исходной таблицы, поскольку она не является сущностью.JSR-317 сообщает об этом интересном бите:

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

"Поскольку для самого сопоставленного суперкласса не существует таблицы."

Означает ли это "нет по умолчанию" - вы можете создать свою собственную таблицу, если хотите, ноон не может быть извлечен сам по себе?

Или это означает, что «для сопоставленного суперкласса таблица не может существовать» - вам не разрешено ее создавать (с @SecondaryTable)?

Согласно JPA 2.0, разрешено ли сопоставлять часть @MappedSuperclass с @SecondaryTable?

1 Ответ

1 голос
/ 01 февраля 2012

Я не уверен, что вы имеете в виду наличие @ SecondaryTable-annotation в сопоставленном суперклассе или наличие атрибутов, определенных в сопоставленном суперклассе, в таблице, которая является @SecondaryTable в сущности, которая выводит сопоставления, поэтому я пытаюсь ответить на оба вопроса.

У отображаемого суперкласса нет собственной таблицы.Контекст был отображен суперкласс используется используется определяет таблицу.Это имеет смысл, поскольку в противном случае наследование отображений для нескольких сущностей из одного сопоставленного суперкласса всегда приводит к необходимости переопределения имени таблицы во всех других, кроме одного производного объекта. Я думаю, что «для сопоставленного суперкласса не существует таблицы» закрывается также использование @SecondaryTableout.

Также XML-схема, приведенная в главе 12.3 спецификации JPA 2.0, не допускает вторичную таблицу для сопоставленного суперкласса.

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

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

...