私は古典的な休止状態@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
を持ってい@DiscriminatorFormula
ます。それは正常に動作します。ただし、データベースには約 500 の異なる値があり@DiscriminatorValue
、そのうちの約 30 を Java クラス (子) にマップし、残りを親 Java クラスにマップする必要があります。
この問題は、Animal クラスの継承の例としてモデル化できます。
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula("...")
public class Animal implements Serializable {
...
@Column
public String getName() { ... }
}
だから私は Java コードで定義された Animal の約 30 のサブクラスを持っています@DiscriminatorValue
。Hibernate がディスクリミネータの不明な値を検出すると、 がスローされWrongClassException
ます。ただし、これらの未知の識別子の値を 1 つのエンティティにマップする必要があります。最適なのは Animal クラスです。(そのような場合は getName() メソッドのみを使用する必要があります。)
SQL CASE を に入れることが 1 つの解決策であることはわかっています@DiscriminatorFormula
が、30 の既知の識別子の値すべて (さらに、他の値を追加する必要がある場合はそれ以上) を記載する必要があります。そのため、より柔軟なソリューションを探しています。
PS レガシーコードですので、機種変更はできません。