【发布时间】:2016-06-03 16:05:13
【问题描述】:
我在定义具有多级继承的架构时遇到问题, 所以在我的情况下,我有一个像下面这样的模式:
模型(id,创建)
UserModel 扩展模型(登录名、密码)
CustomerModel 扩展了 UserModel(订单)
StoreOwnerModel 扩展了 UserModel(商店)
ProductModel 扩展了 Model(name,price)
我在 TABLE_PER_CLASS 上的Model 中设置了继承策略,这意味着我要为Model 的每个子类创建一个表。
并且UserModel 中的继承策略设置为SINGLE_TABLE,以便为所有UserModel 的子类提供一个表。
但在我的数据库中,我看到为每个 UserModel 子类生成了一个表。
在生成的表表USERS中找不到UserModel对应的DiscriminatorColumn user_type。
这是我的实体:
模型类
@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:这不是一个重复的问题,我在以前的任何一个问题上都找不到这个答案。
【问题讨论】:
-
模型不是一个实体,它是一个映射超类,甚至不应该有继承策略——每个扩展它的实体都是它自己的独立实体,只共享映射的属性,而不是表.尝试删除继承标签,因为它一定会以某种方式导致您的提供者出现问题。您可以通过将其设置为单表继承来验证这一点 - 模型应该仍然不会为其创建表。
-
@Chris 谢谢伙计,现在完美运行
标签: java hibernate jpa hibernate-mapping