考虑一个@Entity
类A
,另一个是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
-忽略未知属性。为此使用此设置。