2016-04-15 13 views
0

私は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

質問:私は設定することができますどのようにどのような方法があります私のエンティティまたは特別なトリックを使用してデータベースからエンティティを読み込み、対応する行に表示される正確なタイプのオブジェクトを取得しますか?

答えて

0

これは簡単です:session.load(...)の代わりにsession.get(A.class, id)を使用してください。

関連する問題