如何在不向超类添加另一个实例的情况下插入子类?

时间:2015-09-03 21:26:31

标签: java hibernate jpa inheritance hql

我在类中使用标准的JpaRepository接口。

我有这个课程:

用户:

@Entity
@Table(name = "user")
@Inheritance(strategy = InheritanceType.JOINED)
public class User extends BaseEntity {

    private Long id;
    //Other Attr

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }
    //Getters & Setters...
}

医生:

@Entity
@Table(name = "doctor")
@PrimaryKeyJoinColumn(name = "id", referencedColumnName="id")
public class Doctor extends User {

    private Long regNumber;
    //Getters & Setters
}

我正在搜索,似乎jpa / hibernate没有用于插入带有来自现有用户的信息的医生的功能/程序。

我尝试使用用户查询中的信息保存医生,它为用户表创建了一个新的用户条目。

理论上,一个人可以是一个没有医生的用户,以后可以成为医生。

1 个答案:

答案 0 :(得分:0)

  

理论上,一个人可以是一个没有医生的用户,以后可以成为医生。

这在现实生活中是真实的,但与Java继承无关:给定类型的对象不能成为另一种类型的对象。如果要对这种情况进行建模,继承是一个糟糕的工具。

您应该使用构图。用户可以拥有博士角色。这是一个OneToOne关联,可以使用与您用于映射继承的表相同的表进行映射,并允许用户成为医生。

它也是更好的设计,因为它允许多种角色:例如,用户是医生和音乐家。继承无法实现的东西。