考虑@Entity
班A
,以及另一个作为POJO并扩展B
的班级A
。
有没有办法强制将B
向A
转换为A
(没有反思)?
我有一个方法接收类B
的对象并持久保存该对象。
传递对象B
的引用将导致JPA失败,因为它仍将该对象视为类B
的实例,而@Entity
未注释{{1}}。
答案 0 :(得分:0)
查看允许对象模型中的继承关系的@Inheritance
注释,可以通过多种方式设置它(每个类的表,单个表)。
我创建了详细介绍这两种策略的视频教程。第一个视频涵盖single table strategy,其他视频涵盖table per class。
使用单表策略,您将按如下方式注释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
成为一个实体,我相信在任何情况下都需要这个实体。
答案 1 :(得分:0)
可能您不希望/不能将B
实体添加到persistence.xml文件中。如果是这样,你可以像这样使用杰克逊:
1.创建B
的JSON表示:
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(instanceB);
2.从JSON字符串创建A
- 实例,忽略未知属性。请使用this setting。