jpa实体继承问题

jpa实体继承问题

JPA的继承注解一般有四种–

@MappedSuperclass 这个注解应用的场景是父类不对应任何单独的表,多个子类共用相同的属性
@Inheritence 此注解应用于根实体类以定义继承策略。 如果没有使用此注释定义策略类型,那么它遵循单表战略。
@DiscriminatorColumn 鉴别器属性将一个实体与另一个实体区分开来。 因此,该注释用于提供鉴别器列的名称。 仅需要在根实体类上指定此注释。
@DiscriminatorValue 此注释用于指定表示特定实体的值的类型。 需要在子实体类中指定此注释。

这里先说一下一下@MappedSuperclass

@MappedSuperclass注解使用在父类上面,是用来标识父类的作用

@MappedSuperclass标识的类表示其不能映射到数据库表,因为其不是一个完整的实体类,但是它所拥有的属性能够映射在 其子类对用的数据库表中

@MappedSuperclass标识得类不能再有@Entity或@Table注解 但是可以使用@Id 和@Column注解

JPA继承注解:

单表策略
加入策略
每表每类策略
单表策略:

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
查询父类关联的表 在查询父类的时候 所有子类表中字段全部查询出来

连接策略:

@Inheritance(strategy=InheritanceType.JOINED)
在连接策略中,为每个实体类生成一个单独的表。 每个表的属性都与主键连接。 它消除了字段字重复的可能性。但是父类中除了主键的的其他字段 并不会在子表中查询出来

按类表策略:

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
在按类表策略中,为每个子实体类生成一个单独的表。 与连接策略不同,在按类表策略中不会为父实体类生成单独的表

发布了13 篇原创文章 · 获赞 0 · 访问量 36

猜你喜欢

转载自blog.csdn.net/lose_alan/article/details/105043754
今日推荐