【发布时间】:2015-11-28 05:04:17
【问题描述】:
我想使用 jpa 创建一个深度继承实体。下面是我的实体的示例层次结构。
ProductEntity
- ElectronicsEntity
-- PhoneEntity
-- TabletEntity
-- CameraEntity
-- ComputerEntity
--- PCEntity
--- LaptopEntity
- AccessoriesEntity
-- CasingEntity
-- ScreenProtectorEntity
以下是我的几类实体的示例。
产品实体
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name="type")
public abstract class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
String brand;
private String name;
private String image;
}
电子实体
@Entity
@DiscriminatorValue("Electronics")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name="type")
public abstract class Electronics extends Product {
private Date releasedDate;
}
电话实体
@Entity
@DiscriminatorValue("Phone")
public class Phone extends Electronics {
private String os;
private String cpu;
private String gpu;
private int ram;
private double display;
private double rearCamera;
private double frontCamera;
private int battery;
private double weight;
}
平板实体
@Entity
@DiscriminatorValue("Tablet")
public class Tablet extends Electronics {
private String os;
private String cpu;
private String gpu;
private int ram;
private double display;
private double rearCamera;
private double frontCamera;
private int battery;
private double weight;
}
问题是我的数据库没有正确创建。 Product、Phone 和 Tablet 已正确创建,但 Electronics 未正确创建。 Electronics 表缺少 type 列,该列应该用于区分 Phone 和 Tablet。如您所见,我已经在Electronics 中添加了@Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name="type"),所以type 列应该会自动添加,对吧?我在这里错过了什么?
【问题讨论】:
-
您是否对实体进行了任何更改.. 就像您之前有一些东西,后来您添加了这个 type 列??
-
以前我没有使用继承,但现在我正在尝试使用它。
-
问题可能是 Hibernate 不能添加一个新的非空列,而鉴别器是一个非空列。你可以在列具有 def 值的电子类中尝试一次以下代码.. @DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING, columnDefinition = "varchar default 'SomeElectronic'" , length = 20)
-
哦,嘿,现在可以了。谢谢。
标签: java spring hibernate jpa spring-boot