0

我在 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 ...

现在我问你:有一天我需要确定给定的产品太阳镜还是其他产品类型。我想“鉴别器”就是为此而存在的,但是....

如何?

4

1 回答 1

2

您可以简单地在 getter 方法中返回实体的类型:

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

...

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

但问题是:你为什么需要这样做?产品应该以多态方式使用。访问者模式有助于做到这一点。

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

于 2012-12-27T13:24:28.627 回答