我需要创建一个产品数据库。我的产品将具有共同的属性,例如价格,描述,品牌......和具体的属性,具体取决于他们的类别(笔记本将具有显示尺寸,ram,cpu等)。
我的通用实体是:
@Entity
@Table( name="products" )
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="discriminator",
discriminatorType=DiscriminatorType.STRING
)
@DiscriminatorValue(value="GEN")
public class Product implements Serializable {
// ...
}
以下是特定实体的示例:
@Entity
@DiscriminatorValue("NB")
public class Notebook extends Product {
// ...
}
我想查询我的产品实体,以显示我的数据库中所有产品的表格列表。
我还希望显示“产品类型”列。
如何确定产品的子类型?如果它是笔记本电脑,电话或其他类型的产品?
有一个鉴别器列,由jpa自动创建和管理,但是反向获取 Product 类型的正确方法是什么?
如果无法做到这一点,我该如何重新设计模型以实现目标?
答案 0 :(得分:1)
您可以同时将您的鉴别器列映射为属性(不可编辑)。因此Product
将拥有另一个属性:
...
@DiscriminatorColumn(
name="discriminator",
discriminatorType=DiscriminatorType.STRING
)
@DiscriminatorValue(value="GEN")
public class Product implements Serializable {
@Column(insertable=false, updatable=false)
public String discriminator;
...
}
当您对Product
执行查询时,结果集还将包含Notebook
s。