私はHibernate
v.4(Spring MVC
)を使用します。 SINGLE_TABLE
戦略はDiscriminatorColumn
を使用して一つのテーブルの上にマッピングされたいくつかの継承されたエンティティがありますIDでSINGLE_TABLE継承を使用してエンティティをロードする
@Entity
@DiscriminatorColumn
@DiscriminatorOptions(force = true)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class A {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
...
}
@Entity
@DiscriminatorValue(value = "B")
public class B extends A {
...
}
@Entity
@DiscriminatorValue(value = "C")
public class C extends A {
...
}
は、私は、オブジェクトの唯一id
持っている(HttpServletRequest
で言う)の入力におけるので、私は、このエンティティを管理するための汎用GUIインタフェースを持って考えてみましょうしかし、私はどのタイプがこのオブジェクトであるのか正確にはわかりません。そのため私はsession.load(...)
の正確なクラスを指定することができません。しかし、特定の部分については、エンティティの特定のフィールドにアクセスする必要があるため、オブジェクトを正確なタイプ(B
またはC
)にキャストしなければなりません。
だから、私はそれがタイプA
の下でプロキシオブジェクトを作成し、それがB
またはC
にキャストすることはできませんA a = (A) session.load(A.class, id);
やっているとき:
java.lang.ClassCastException: my.A_$$_jvst551_6 cannot be cast to my.B
質問:私は設定することができますどのようにどのような方法があります私のエンティティまたは特別なトリックを使用してデータベースからエンティティを読み込み、対応する行に表示される正確なタイプのオブジェクトを取得しますか?