2017-06-07 18 views
0

私はC1とC2の2つのクラスを持っています。それぞれはそれ自身のテーブルにとどまります。それぞれに独自のHibernate XML記述があり、独自のテーブルがあります。これらのクラス間の接続はまったくありません。Hibernateにサブクラスを無視させる方法を教えてください。

C1がC2のサブクラスであることを除いて。

明らかに、C1のXMLはC2から多くのものをコピーします(いくつかのものが追加されています)が、それは別のコピーです。もう一度:XMLファイルには、もう一方のクラスまたは他のテーブルは記述されていません。

しかし、 "From C2"クエリを実行すると、Hibernateは両方のテーブルをすべて取得します。

論理的に言えば、C1は実際にはC2なので、私はすべてのC2が欲しいなら、私はC1も必要とするので、C1のすべての表を読む必要があります。 HibernateはC2のサブクラスC1を検出するためにリフレクションを使用する必要があります。

これが予想される動作であるとします(私には期待されていませんでしたが)。どうすれば避けられますか?私が「C2から」と言うとき、私は実際にはC2だけで、C1では起動しないということをHibernateに伝える方法はありますか?タイプC1ではないオブジェクトに制限するクエリに追加できる句がありますか?C1のテーブルを最初に照会するとパフォーマンスが低下するのを避けますか?

答えて

2

C2から選択すると、休止状態でもデフォルトでC1が選択されます。それは、多相クエリと呼ばれています。 Polymorphic queriesおよびTutorialを参照のこと。

あなたがエンティティに追加する必要があり、それを解決/ PolymorphismType.EXPLICIT

を修正するには

@Entity(多型= PolymorphismType.EXPLICIT)

https://docs.jboss.org/hibernate/orm/5.2/javadocs/

IMPLICIT - このエンティティからスーパーエンティティーのいずれかが取り出されると、取り出されます。デフォルト、

EXPLICIT - 明示的に尋ねられた場合にのみ、このエンティティが取得されます。

+0

C1またはC2の 'PolymorphismType.EXPLICIT'? –

関連する問題