#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")