JPA: возможно ли изменить PK в иерархии наследования? - PullRequest
3 голосов
/ 21 апреля 2011

У меня есть следующий дизайн БД:

Действительный XHTML http://www.kawoolutions.com/media/geoareas.png

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

Цель: Штаты и страны также используются для почтовых адресов, и я не хочу использовать GeoAreas.идентификатор для этого (ссылки на Штаты и страны не показаны).

Вопрос заключается в следующем: поддерживается ли такая конструкция JPA?Только JPA 2.0?Совсем нет?

Проблема, которую я вижу, состоит в том, как аннотация @Id (используемая для всех отображений) будет указываться, так как класс GeoArea будет выглядеть примерно так:

public abstract class GeoArea implements Serializable
{
    @Id
    @Column(name = "id")
    protected Integer id;

    ...
}

, а подкласс -далее требуется указать другой альтернативный @Id для некоторых свойств, например

public class Country extends GeoArea
{
    @Id
    @Column(name = "iso_code")
    private String isoCode;

    ...
}

Может ли кто-нибудь указать мне спецификацию JPA, где он отрицает такой сценарий, если?

1 Ответ

2 голосов
/ 21 апреля 2011

Раздел 2.4

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

т.е. вы не можете "переопределить" идентичность (добавив дополнительное поле к идентичности) в подклассе.

...