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

型号(id,已创建)

UserModel扩展模型(登录名,密码)

CustomerModel扩展UserModel(订单)

StoreOwnerModel扩展UserModel(商店)

ProductModel扩展模型(名称,价格)

我已经在 TABLE_PER_CLASS 上的Model中设置了继承策略,这意味着我要为Model的每个子类创建一个表。

并将UserModel中的继承策略设置为 SINGLE_TABLE 以使所有UserModel的子类只有一个表。

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

并且我无法在生成的表DiscriminatorColumn user_type中找到与USERS相对应的UserModel

这是我的实体:

模型类

@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我应该从@Inheritance实体中删除Model并且我还从@SecondaryTable(name="USERS")中删除了UserModel,它的运行非常完美。

关于java - 继承Hibernate/JPA多个级别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37618945/

10-10 14:34