我在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 ...
现在我问你:有一天我需要确定某个产品是太阳镜还是其他一些产品类型。我认为“鉴别者”就是为了这个......但
如何?
答案 0 :(得分:2)
您只需在getter方法中返回实体的类型:
public ProductType getType() {
return ProductType.PRODUCT;
}
...
@Override
public ProductType getType() {
return ProductType.SUN_GLASSES;
}
但问题是:你为什么要这样做?产品可以以多态方式使用。访客模式有助于实现这一目标。
顺便说一句,请注意,即使返回的类型是SUN_GLASSES,如果引用是一个惰性代理,将产品转换为SunGlasses可能会失败。