Hibernate:从鉴别器中获取子类?

时间:2012-12-27 11:42:22

标签: hibernate jpa

我在Jpa / Hibernate中有每个类层次结构映射的经典表:

所有人的父亲是:

@Entity
@Table( name="products", uniqueConstraints=@UniqueConstraint(columnNames="barcode") )
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
    name="discriminator",
    discriminatorType=DiscriminatorType.STRING
)
@DiscriminatorValue(value="GENERAL")
public class Product implements Serializable ...

然后我会:

@Entity
@Table( name="products" )
@DiscriminatorValue("GLASS")
public class Sunglasses extends Product ...

现在我问你:有一天我需要确定某个产品太阳镜还是其他一些产品类型。我认为“鉴别者”就是为了这个......但

如何?

1 个答案:

答案 0 :(得分:2)

您只需在getter方法中返回实体的类型:

public ProductType getType() {
    return ProductType.PRODUCT;
}

...

@Override
public ProductType getType() {
    return ProductType.SUN_GLASSES;
}

但问题是:你为什么要这样做?产品可以以多态方式使用。访客模式有助于实现这一目标。

顺便说一句,请注意,即使返回的类型是SUN_GLASSES,如果引用是一个惰性代理,将产品转换为SunGlasses可能会失败。

相关问题