Как использовать Superclass @Entity для ссылки на подклассы при весенней загрузке - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь создать таблицу, используя Spring boot и Hibernate JPA.Теперь у меня есть ситуация, когда у меня есть продукт Entity, который может быть двух типов.BuiltInProduct или CustomProduct

Продукт является суперклассом, и как BuiltInProduct, так и CustomProduct расширяют его.

Теперь у меня есть другая сущность OrderItem, которая имеет отношение @ManyToOne к продукту.

Таким образом, этот OrderItem может иметь продукт в виде BuiltIn OR Custom.

Я пытался использовать @Inheritance для Product с @DiscriminatorColumn в качестве is_a и расширить этот класс для создания BuiltInProduct и CustomProduct.Мои классы выглядят как

@Table(name = "products")
@Entity
@Inheritance
@DiscriminatorColumn(name = "is_a")
public abstract class Product {
  // Getter Setters
}

Два других класса были похожи на

@Entity
public class BuiltInProduct extends Product {
  // Getter setters
}

Теперь, так как мой Entity OrderItem может иметь встроенный или пользовательский продукт, у него есть поле Product

public class OrderItem {
  ...
  @ManyToOne
  private Product product;
}

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

Я попытался десериализовать JSON с Джексоном в полиморфные типы - полный пример даетмне ошибка компиляции

Я все еще не могу получить желаемый вывод.

Я новичок в Spring и не знаю, как обрабатывать подобные сценарии.

Также я не уверен, что я использую правильный @Inheritance или должен использовать подход JOINED, TABLE_PER_CLASS.

Я считаю, что JOINED будет более подходящим, поскольку ButilIn и CustomProducts будут иметь разные атрибуты, но с одинаковымивремя также не может понять, как заставить это работать.

Мой пример использования - у меня есть поле, которое может иметь BuiltInProducts, которые можно выбрать, илиПользователь может добавить пользовательский продукт.

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