在JPA / Spring Boot中重用实体

时间:2018-01-12 10:41:39

标签: java postgresql jpa spring-boot

我有一个现有的实体无法修改,如下所示:

@Entity
public class ChildEntity implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name="id")
private String id;
@Column(name="name")
private String name;
//getters, setters, et al.

我有一个新的查询,它返回与上面相同的数据,并带有一个额外的列,如下所示:

@Entity
public class ParentEntity implements Serializable{
private static final long serialVersionUID = 1L;
@Column(name="extra")
private String extra;
@Id
@Column(name="id")
private String id;
@Column(name="name")
private String name;
//getters, setters, et al. from child

如上所述,我想将上面的类缩减为:

@Entity
public class ParentEntity implements Serializable{
private static final long serialVersionUID = 1L;
@Column(name="extra")
private String extra;
@Embedded
private ChildEntity entity; //ChildEntity will have annotation @Embeddable
//getters, setters, of extra param

但是,当我运行将数据分配到ParentEntity列表的本机查询时,它无法识别ChildEntity

我的疑问是这样的:

ChildEntity: select name,id from table where (/*some condition*/)
ParentEntity: select extra,name,id from table where (/*some condition*/)

我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果您阅读37.1.6 Embeddable Classes in Entities

  

可嵌入类用于表示实体的状态,但是   与实体类不同,它们不具有自己的持久身份。

回顾您的实体,您可能需要@MappedSuperclass@Inheritance,具体取决于您的模型关联。这个帖子explains明确指出了这一点。