Почему аннотация MappedSuperClass больше не действует в сочетании с @Inheritance при переходе на Hibernate 5.4.1? - PullRequest
2 голосов
/ 14 марта 2019

Я перевожу несколько баз кода для использования Hibernate 5.4.x вместо Hibernate 5.2.x.

Для абстрактного базового класса я использую

@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class AbstractPersistentJPAObject extends AbstractPersistentObject {
    // some properties
}

Однако ORM жалуется на это с сообщением об ошибке

Сущность не может быть аннотирована обоими @Inheritance и @MappedSuperclass

Это не было проблемой с Hibernate <= 5.2.x, и теперь я удивляюсь, почему это нельзя больше разрешать. </p>

Вопросы

  1. Это ошибка или особенность?Если есть особенность: Какое обоснование стоит за этим изменением?
  2. Что можно сделать, чтобы обойти ситуацию?
  3. Если "обходить" не является верной идеей: как следуетприведенный выше фрагмент кода можно изменить, чтобы правильно перенести его в Hibernate> = 5.4.x.

Любые твердые ответы приветствуются.

1 Ответ

2 голосов
/ 14 марта 2019

Мои ответы приведены ниже:

  1. Отображение неверно в соответствии со спецификацией JPA 2.2 , @MappedSuperclass и @Inheritance нельзя использовать вместе. Кажется, приведенное выше отображение было допустимым в более ранних выпусках Hibernate. Однако эта поддержка, похоже, удалена в Hibernate 5.4.x.

  2. Чтобы решить проблему в этом конкретном сценарии, описанном выше, вы можете заменить @MappedSuperclass на @Entity, и он должен нормально работать.

Есть также похожий вопрос на форуме Hibernate .

Вы также можете проверить HHH-13217 , в котором Гейл Баднер и Влад Михалча (оба разработчики Hibernate) обсуждают эту проблему.

В следующем выпуске 5.4.2 @Inheritence будет игнорироваться, если он используется вместе с @MappedSuperclass (см. Соответствующий PR на Github ).

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