JPA实体继承的映射
JPA实体继承的映射
1、父类只存在实体公共字段查询
@MappedSuperclass public class Model implements Serializable{ private Date createdAt; private Date updatedAt; //省略getter、setter }
@Entity @IdClass(value = PartyPK.class) @Table(name = "account") public class Account extends Model{ @Id private String partyId; @Id private String accountTypeId; @OneToOne @JoinColumn(name = "account_type_id",insertable = false,updatable = false) private AccountType accountType; private String account; private String password; private String passwordSalt; private String headImage; //省略getter、setter }
2、实体继承实体
继承映射使用@Inheritance来注解,它的strategy属性的取值由枚举InheritanceType来定义(包括SINGLE_TABLE、TABLE_PER_CLASS、JOINED,分别对应三种继承策略)。@Inheritance注解只能作用于继承结构的超类上。如果不指定继承策略,默认使用SINGLE_TABLE。
JPA提供了三种继承映射策略:
①、 一个类继承结构一个表的策略。这是继承映射的默认策略。即如果实体类B继承实体类A,实体类C也继承自实体A,那么只会映射成一个表,这个表中包括了实体类A、B、C中所有的字段,JPA使用一个叫做“discriminator列”来区分某一行数据是应该映射成哪个实体。注解为:@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
②、 联合子类策略。这种情况下子类的字段被映射到各自的表中,这些字段包括父类中的字段,并执行一个join操作来实例化子类。注解为:@Inheritance(strategy = InheritanceType.JOINED)
③、 每个具体的类一个表的策略。注解为:@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Entity
@Table(name = "model")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "model_type")
public class Model implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Integer id;
protected String name;
//省略 getter、setter
}
@Entity
@DiscriminatorValue("test1")
public class Test extends Model{
private String age;
//省略getter、setter
}
转载于:https://my.oschina.net/cxlt216/blog/756779
上一篇: 自己用java写一个http和https代理服务器
下一篇: Netty4服务端入门代码示例
推荐阅读
-
Hibernate实体对象继承的三种方法
-
Hibernate实体对象继承的三种方法
-
关于springboot中的实体类无法映射数据库中不存在的字段
-
使用Java 8 Lambda表达式将实体映射到DTO的操作
-
Java Persistence API 实体映射的方向问题 JavaJPAORM
-
简单的C#实体映射 AutoMapper
-
Jpa 如何使用@EntityListeners 实现实体对象的自动赋值
-
Spring Data JPA实现查询结果返回map或自定义的实体类
-
自己编码实现数据库的映射实体的代码生成器_MySQL
-
关于Hibernate ORM映射实体通用hashCode与equals方法的实现