Несколько @MappedSuperclass

Я использую JPA 2.0 и EclipseLink 2.2.0.

У меня есть @MappedSuperclass, AbstractEntity, который является основой для всех моих объектов, предоставляющих столбцы PK и аудита.

Я хочу, чтобы другой @MappedSuperclass расширил этот класс и стал корнем для стратегии наследования TABLE_PER_CLASS.

В настоящее время при создании с Maven я получаю ошибки заголовка.

Являются ли множественные @MappedSuperclass допустимыми в иерархии наследования?

Ответы

Ответ 1

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

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

Это означает, что вы можете сделать следующее:

@MappedSuperclass
public class FirstMapped {
    String firstVal;
}

@MappedSuperclass
public class SecondMapped extends FirstMapped {
    String secondVal;
}

@Entity
public class ExtendingEntity extends SecondMapped {
    @Id int id;
}

Переведенный суперкласс не может быть корнем наследования сущностей. Корень наследования объекта должен быть сущностью, как указано в документации. С добавлением EclipseLink @Inheritance к одному из отображенных суперклассов в примере выше молча игнорируется. Добавление @Inheritance к функции ExtendedEntity работает как ожидалось - оно становится корнем иерархии наследования объектов.

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

Если это не ответит на ваш вопрос, это поможет, если вы можете поделиться этими "ошибками заголовка".

Ответ 2

Являются ли множественные @MappedSuperclass допустимыми в иерархии наследования?

Да, я сделал это. Чтобы иметь возможность ответить на ваш вопрос о ошибках maven, вам необходимо предоставить стек и код.