我在定义具有多级继承的模式时遇到问题, 所以在我的情况下,我有一个类似于下面的架构:
模型(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:这不是一个重复的问题,我不会在之前的任何一个上找到这个答案。
答案 0 :(得分:2)
根据@chris我应该从@Inheritance
实体中删除Model
我也从@SecondaryTable(name="USERS")
删除了UserModel
,它的效果非常好。