0

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

如果这是不可能的,我该如何重新设计我的模型以实现我的目标?

4

1 回答 1

1

您可以同时将鉴别器列映射为属性(不可编辑)。所以Product会有另一个属性:

...
@DiscriminatorColumn(
  name="discriminator",
  discriminatorType=DiscriminatorType.STRING
)
@DiscriminatorValue(value="GEN")
public class Product implements Serializable { 

  @Column(insertable=false, updatable=false)
  public String discriminator;
  ...
}

当您对 s 执行查询时Product,结果集也将包含Notebooks。

于 2013-05-20T21:30:25.910 回答