クラス「X」がテーブル「X」にマッピングされ、クラス「A」がテーブル「A」にマッピングされ、クラス「B」がテーブル「B」にマッピングされているとします。
テーブル X 構造:(X_ID、他のいくつかの列 テーブル A 構造:(A_Id、X_Id、他のいくつかの列) テーブル B 構造:(A_Id、他のいくつかの列)...テーブル B にも A_Id があります
クラス 'B' はクラス 'A' を拡張します。両方のマッピング ファイルは次のとおりです。
クラス 'A' 親マッピング ファイル:
@Entity
@Table(name = 'A')
@Inheritance(stratergy=InheritanceType.Joined)
public abstract class A {
@Id @Clumns(name = "A_Id)
@GeneratedValue
protected Long aId;
-- some more A specific fields
}
クラス 'B' マッピング ファイル:
@Entity
@Table(name= 'B')
Public class B extends A{
---- B specific fields
}
今、私は休止状態の基準 API を使用して記述する必要がある以下のような SQL クエリを持っています。
select * from X
INNER JOIN A
ON X.id = A.id
INNER JOIN B
ON A.id = B.id
where B.name = 'XYZ'
and B.Sex = 'M'
私は思いついた:
Criteria c = session.createCriteria(x.class, "x");
.createAlias("x.a", "a")
.createAlias("a.b", "b")
.add(Restrictions.eq("b.sex", "M"))
.add(Restrictions.eq("b.name", "XYZ"));
しかし、マッピング ファイルを確認すると、A に B の直接参照はありません。したがって、休止状態は「B は A に関連していません」エンティティをスローします。
この継承をクエリ基準にマップする方法はありますか