我有两个类,一个是非实体类假设A,它在所有实体类中都有公共字段,另一个是扩展实体类的实体类.我在下面定义这些类的方法.
public class A{
private Date startDate;
private Date endDate;
//setters and getters for these fields
}
@Entity
@Table(name="some table name")
public class B extends A{
private long id;
private String duration;
public B(){
}
public B(Date startDate,Date endDate,String duration){
//setter methods for the fields inside the constructor
}
//Setter ,Getter methods for the fields in B class
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,当我运行应用程序时,它正在创建仅包含在B类中定义的字段的表.表中没有超类(A类)中的字段.我在哪里做错了...
从非实体类继承不会继承持久属性.在JPA(2.0)规范中,这用以下词语告诉:
非实体超类仅用于继承行为.非实体超类的状态不是持久的.从非实体超类继承的任何状态在继承实体类中都是非持久的.
如果您的目标是仅继承持久性映射,那么使用MappedSuperClass将为您的目标服务.想法是,只有持久映射才会被继承,并且可能被重用,扩展到扩展相同映射超类的多个实体.从持久性的角度来看,映射的超类A和扩展实体B之间没有关系,只是重用持久性映射.如果您的映射是合理的,那么只需要为@MappedSuperClass类添加注释A.
如果你想在查询和关系中使用超类A,那么它应该是实体(映射的超类将不起作用).开始的好方法是从Java EE 教程中读取相应的部分.
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |