将POJO升级到JPA实体课程



考虑一个@EntityA,另一个是POJO的类B,并扩展了A

有什么方法可以将B的升级迫使A(无反射)?

我有一种接收A类的对象并坚持该对象的方法。传递对对象B的引用将导致JPA失败,因为它仍然将对象视为类B的实例,并且B未用@Entity注释。

查看允许在对象模型中继承关系的@Inheritance注释,可以通过多种方式进行设置(每类,单个表)。

我创建了视频教程,详细介绍了这两种策略。第一个视频涵盖了单个表策略和每个班级的其他封面表。

使用单个表策略,您将注释A类如下:

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@Table(name="TABLE_NAME")
@DiscriminatorColumn(name="DISCRIMINATOR_COLUMN", discriminatorType=DiscriminatorType.STRING)
@Entity
public class A {}

然后注释B类:

@Entity
@Table(name = "TABLE_NAME")
@DiscriminatorValue(value="VALUE_TO_DISTINGUISH_B")
public class B{}

要注意的一件事是,在这种情况下,B是一个实体,我相信在任何情况下都需要它。

可能您不想要/不能将B实体添加到persistence.xml文件中。如果是这样,您可以这样使用杰克逊:

1.创建B的JSON表示:

ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(instanceB);

2.从JSON字符串中创建A-忽略未知属性。为此使用此设置。

最新更新