【问题标题】:Inheritance Hibernate/JPA multiple levels继承Hibernate/JPA多层次
【发布时间】: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


【解决方案1】:

根据@chris,我应该从Model 实体中删除@Inheritance 我还从UserModel 中删除了@SecondaryTable(name="USERS"),它工作得非常完美。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    相关资源
    最近更新 更多