Аннотация отображения гибернации, пропущенная системой

#java #spring #hibernate #maven

#java #весна #гибернация #maven

Вопрос:

У меня проблема с отображением в режиме гибернации. У меня есть абстрактный класс, который реализует интерфейс:

 @MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class AbstractPromotion implements IPromotion {
}
 

Этот абстрактный класс является суперклассом (как вы можете видеть в аннотации) и 3 сопоставленных класса с @Entity расширением этого суперкласса. Когда я запускаю «установку maven», я получаю это сообщение об ошибке внутри консоли, в нем говорится :

 Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: product.model.Product.promotion[product.promotion.AbstractPromotion]
 

я этого не понимаю, потому что рассматриваемый класс сопоставлен (как классы, которые его расширяют), как указано выше, но это похоже на то, что аннотации пропущены…
любая помощь была бы очень признательна

с наилучшими пожеланиями

Ответ №1:

AbstractPromotion не является сущностью. Это a MappedSuperclass . Чтобы применить стратегию наследования и быть целью ассоциации, класс должен быть сущностью. Заменить @MappedSuperclass на @Entity .

Mappedsuperclass используется только для наследования общих полей и методов в нескольких несвязанных объектах (например, inherit an id или a creationDate в нескольких несвязанных объектах).

Ответ №2:

Если вы хотите использовать одну и ту же таблицу базы данных для всех подкасс, вам нужно использовать дискриминаторы. В основной класс вам нужно добавить эти аннотации.

   @Entity
  @Table(name = "foo")
  @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
  @DiscriminatorColumn(name = "foo_type", discriminatorType = DiscriminatorType.STRING
 

И в подклассе эта аннотация

        @Entity
       @DiscriminatorValue("The value of your foo_type that discriminate this entity")