继承Hibernate / JPA多个级别

时间:2016-06-03 16:05:13

标签: java hibernate jpa hibernate-mapping

我在定义具有多级继承的模式时遇到问题, 所以在我的情况下,我有一个类似于下面的架构:

  

模型(ID,创建)

     

UserModel扩展了Model(登录名,密码)

     

CustomerModel扩展了UserModel(订单)

     

StoreOwnerModel扩展了UserModel(商店)

     

ProductModel扩展了Model(名称,价格)

我在 TABLE_PER_CLASS Model中设置了继承策略,这意味着我希望每个子类Model创建一个表

并且UserModel中的继承策略设置为 SINGLE_TABLE ,只有一个表可用于所有UserModel的子类。

但在我的数据库中,我看到每个UserModel子类都会生成一个表。

我找不到与DiscriminatorColumn user_type对应的生成的表格USERS中的UserModel

这是我的实体:

Model.class

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@MappedSuperclass
public abstract class Model {

    @Id
    @GeneratedValue(strategy=GenerationType.TABLE)
    private Integer id;

    @DateTimeFormat(pattern="dd/MM/yyyy hh:mm:ss")
    private Date created;

    //getters/setters
}

UserModel.class

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="user_type",discriminatorType=DiscriminatorType.STRING)
@SecondaryTable(name="USERS")
@DiscriminatorValue("user")
public class UserModel extends Model{


    @Column(unique=true)
    private String login;
    //getters & setters
}

CustomerModel.class

@Entity
@DiscriminatorValue(value="customer")
public class CustomerModel extends UserModel{

    private List<OrderModel> orders;

    //getters & setters

}

StoreOwnerModel.class

@Entity
@DiscriminatorValue(value="store_owner")
public class StoreOwnerModel extends UserModel{

    private List<StoreModel> stores;

    //getters & setters

}

ProductModel.class

@Entity
public class StoreOwnerModel extends UserModel{

    private String name;
    private double price;
    //getters & setters

}

PS:这不是一个重复的问题,我不会在之前的任何一个上找到这个答案。

1 个答案:

答案 0 :(得分:2)

根据@chris我应该从@Inheritance实体中删除Model 我也从@SecondaryTable(name="USERS")删除了UserModel,它的效果非常好。