2017-06-16 4 views
0

我々は弁別と休止状態の継承マッピング戦略を使用することにしました(10.1.3参照:https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch10.html#inheritance-tablepersubclass-discriminator)を読み取り専用比較的少量のデータのロード用(〜 1つのテーブルに20 000行、80のエンティティタイプ、各行には平均100文字が含まれます)。休止状態:単一のクエリ(単一テーブル継承)によって、すべてのサブクラスをロード

アプリケーションが起動すると、hibernateはこれらのエンティティを〜80個のクエリと別の〜150個のクエリでロードし、それらの間の関係を確立します。これはもちろん時間がかかり、不必要です。

単一のクエリでテーブル全体を読み込んでも構いませんが、識別器の列を使用するときにエンティティ型のマッピングを正しく取得する方法はありますか?

もちろん、ロードするオプションは常にあります。&は手動でマップしますが、私たちは休止状態に固執したいと思います。抽象エンティティの

Hibernate設定:

@Entity 
@DiscriminatorColumn(name = "DISCRIMINATOR_COLUMN", discriminatorType = DiscriminatorType.STRING, length = 30) 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@Table(name = "MAIN_TABLE") 
public abstract class ApplicationAbstractEntity 
... 

サブクラス構成例:指定されたサブクラスの

@Entity 
public class SomeSubEntity extends ApplicationAbstractEntity 
... 

ロードエンティティ(これは、各サブクラスのために繰り返される、80のエンティティタイプ= 80クエリ):

currentHibernateSession.createCriteria(SomeSubEntity.class); 

答えて

1

カスタムトランスにsetResultTransformerを使用すると、結果がエンティティにマップされます。あなたは

currentHibernateSession.createCriteria(ApplicationAbstractEntity.class).setResultTransformer(new CustomResultTransformer()); 
のように1つのクエリですべてのエンティティをロードすることができ

関連する問題