将POJO向上转换为JPA实体类

时间:2014-02-04 11:11:23

标签: java hibernate jpa

考虑@EntityA,以及另一个作为POJO并扩展B的班级A

有没有办法强制将BA转换为A(没有反思)?

我有一个方法接收类B的对象并持久保存该对象。 传递对象B的引用将导致JPA失败,因为它仍将该对象视为类B的实例,而@Entity未注释{{1}}。

2 个答案:

答案 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