hibernate注解映射继承关系
数据库表
用户表(User)
id | username | password |
客户表(Customer),客户表id引用用户表id
id | phone |
员工表(Employee),员工表id引用用户表id
id |
飞机表(Plane),飞机表包含客机和战斗机,客机有厕所,战斗机有武器
id | type | speed | wc_position | weapon_position |
实体映射
//子类共享属性id,version @MappedSuperclass public abstract class IdentifiedEntity implements Serializable { @Id @GeneratedValue @Getter private Long id; @Version @Getter private int version; private void setId(Long id) { this.id = id; } private void setVersion(int version) { this.version = version; } } // User的id是在父类IdentifiedEntity中定义的 @Entity public class User extends IdentifiedEntity { @Getter @Setter private String username; @Getter @Setter private String password; } // Customer,Employee是User的子类 // 它们的id既是主键也是外键 // 它们的主键都作为外键引用User表的主键 @Entity @PrimaryKeyJoinColumn(name = "id") public class Customer extends User { @Getter @Setter private String phone; } @Entity @PrimaryKeyJoinColumn(name = "id") public class Employee extends User { @Getter @Setter private String qq; } // Plane是A370和J10的父类 @Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING) public class Plane extends IdentifiedEntity{ private String speed; } @Entity @DiscriminatorValue("370") public class A370 extends Plane{ private String wc_position; } @Entity @DiscriminatorValue("738") public class j10 extends Plane{ private String weapon_position; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。