JPA产品DB模型设计

时间:2013-05-20 20:20:17

标签: hibernate java-ee database-design jpa jpa-2.0

我需要创建一个产品数据库。我的产品将具有共同的属性,例如价格,描述,品牌......和具体的属性,具体取决于他们的类别(笔记本将具有显示尺寸,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 类型的正确方法是什么?

如果无法做到这一点,我该如何重新设计模型以实现目标?

1 个答案:

答案 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。