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 に答える