继承 Hibernate/JPA 多层次
Inheritance Hibernate/JPA multiple levels
我在定义具有多级继承的模式时遇到问题,
所以在我的例子中,我有一个像下面这样的模式:
Model(id,created)
UserModel extends Model (login,password)
CustomerModel extends UserModel (orders)
StoreOwnerModel extends UserModel (stores)
ProductModel extends Model(name,price)
我在 Model
上 TABLE_PER_CLASS 中设置了继承策略,所以这意味着我想要Model
的每个子 class 创建一个 table.
并且UserModel
中的继承策略设置为SINGLE_TABLE只有一个table 所有 UserModel
的子类。
但是在我的数据库中,我看到对于每个 UserModel subclasses 都会生成一个 table。
在生成的tabletableUSERS
中找不到DiscriminatorColumn user_type
对应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
}
用户Model.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
}
客户Model.class
@Entity
@DiscriminatorValue(value="customer")
public class CustomerModel extends UserModel{
private List<OrderModel> orders;
//getters & setters
}
店主Model.class
@Entity
@DiscriminatorValue(value="store_owner")
public class StoreOwnerModel extends UserModel{
private List<StoreModel> stores;
//getters & setters
}
产品Model.class
@Entity
public class StoreOwnerModel extends UserModel{
private String name;
private double price;
//getters & setters
}
PS:这不是一个重复的问题,我在之前的任何一个问题上都找不到这个答案。
根据@chris 的说法,我应该从 Model
实体中删除 @Inheritance
我还从 UserModel
中删除了 @SecondaryTable(name="USERS")
,它运行得非常完美。
我在定义具有多级继承的模式时遇到问题, 所以在我的例子中,我有一个像下面这样的模式:
Model(id,created)
UserModel extends Model (login,password)
CustomerModel extends UserModel (orders)
StoreOwnerModel extends UserModel (stores)
ProductModel extends Model(name,price)
我在 Model
上 TABLE_PER_CLASS 中设置了继承策略,所以这意味着我想要Model
的每个子 class 创建一个 table.
并且UserModel
中的继承策略设置为SINGLE_TABLE只有一个table 所有 UserModel
的子类。
但是在我的数据库中,我看到对于每个 UserModel subclasses 都会生成一个 table。
在生成的tabletableUSERS
中找不到DiscriminatorColumn user_type
对应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
}
用户Model.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
}
客户Model.class
@Entity
@DiscriminatorValue(value="customer")
public class CustomerModel extends UserModel{
private List<OrderModel> orders;
//getters & setters
}
店主Model.class
@Entity
@DiscriminatorValue(value="store_owner")
public class StoreOwnerModel extends UserModel{
private List<StoreModel> stores;
//getters & setters
}
产品Model.class
@Entity
public class StoreOwnerModel extends UserModel{
private String name;
private double price;
//getters & setters
}
PS:这不是一个重复的问题,我在之前的任何一个问题上都找不到这个答案。
根据@chris 的说法,我应该从 Model
实体中删除 @Inheritance
我还从 UserModel
中删除了 @SecondaryTable(name="USERS")
,它运行得非常完美。