如何在Spring Boot中使用超类@Entity引用子类

时间:2019-05-21 11:23:48

标签: java spring-boot inheritance spring-data-jpa

我正在尝试使用Spring Boot和Hibernate JPA创建一个表。现在,我有一个实体产品,该产品可以是两种类型。 BuiltInProduct或CustomProduct

Product是超类,BuiltInProduct和CustomProduct都对其进行扩展。

现在我有另一个实体OrderItem,它与产品具有@ManyToOne关系。

因此,此OrderItem可以将产品作为“内置”或“自定义”。

我尝试在@Inheritance作为@DiscriminatorColumn的Product上使用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可以具有内置产品或自定义产品,因此它具有字段“产品”

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

我知道该产品是抽象类,因此我需要更多信息来序列化和反序列化为类型。

我尝试了Deserialize JSON with Jackson into Polymorphic Types - A Complete Example is giving me a compile error

我仍然无法获得所需的输出。

我是Spring的新手,不知道如何处理这种情况。

我也不确定我使用的是正确的@Inheritance还是应该使用JOINED,TABLE_PER_CLASS方法。

我相信JOINED会更适合,因为ButilIn和CustomProducts将具有不同的属性,但同时也无法弄清楚如何实现这项工作。

我的用例是,我有一个可以包含BuiltInProducts的字段,可以选择该字段,或者用户可以添加自定义产品。

0 个答案:

没有答案