Joined継承戦略でOpenJPAを使用しています(InheritanceType.JOINED-スーパークラスのすべてのフィールドに単一のテーブルがあり、サブクラステーブルには、サブクラスに追加されたすべてのフィールドと、スーパークラスへの参照が含まれていますテーブル)。スーパークラスの Person と、いくつかのサブクラス (TypeAPerson、TypeBPerson など) があるとします。次のようなクエリがある場合:
@NamedQuery(
name="Person.findByName",
query="SELECT p FROM Person p WHERE p.name = :name")
私の知る限り、Person インスタンスではなく、適切なサブクラス インスタンスを取得します。hereで述べたように、これを達成して適切なサブクラスを取得するために、OpenJPA は複数の結合 (サブクラスごとに 1 つ) を行います。特にサブクラスが多い場合、これはパフォーマンスが非常に悪くなります。私の質問は、JPAに参加するテーブルのヒントを与えることでこれを回避する方法があるかどうかです? 最初に頭に浮かぶのは、Discriminator 値の使用です。OpenJPA は Joined 戦略を持つ Discriminator を持つことをサポートしているので、discriminator の値からサブクラス (したがって、結合するための適切なテーブル) を決定できるはずですか? これを達成する方法はありますか?不要なデータベース結合を回避する他の方法はありますか?