在定义具有多级继承的模式时,我遇到了问题,因此在我的例子中,我有一个类似于下面的模式:
模型(id,已创建) UserModel扩展模型(登录、密码) CustomerModel扩展UserModel (订单) StoreOwnerModel扩展UserModel (商店) ProductModel扩展模型(名称、价格)
我在TABLE_PER_CLASS,上用Model
设置了继承策略,这意味着我希望为Model
的每个子类创建一个表。
UserModel
中的继承策略被设置为SINGLE_TABLE,只有一个表用于所有UserModel
的subClasses。
,但在我的数据库中,我看到为每个UserModel子类生成了一个表。
我无法在生成的表DiscriminatorColumn user_type
中找到与UserModel
对应的表USERS
。
以下是我的实体:
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
}
这不是一个重复的问题,我在以前的任何一个问题上都找不到这个答案。
发布于 2016-06-03 08:37:22
根据@chris的说法,我应该从Model
实体中删除Model
,我也从UserModel
中删除了@SecondaryTable(name="USERS")
,它运行得非常完美。
https://stackoverflow.com/questions/37618945
复制