3

消毒された例から始めましょう。

私のシステムには、クラスCarがあります。Carにはいくつかのフィールドがあり、その中にはクラスGearShiftのgearShiftインスタンスがあります。

public class Car {
    private GearShift gearShift;

    // Snip
}

GearShiftは抽象クラスであり、AutomaticShiftとStickShiftが継承します。これは、Hibernateではサブクラスごとのテーブルとしてマップされます。

さて、オートマチックギアシフト付きの車を手に入れたいとしましょう。Hibernate基準を使用してこれを実行したいので、以下に示すように、追加できる「ofType」制限を想像しています。

getSession().createCriteria(Car.class)
    .add(Restrictions.ofType(AutomaticShift.class)
    .list();

これはどうにか可能ですか?

4

2 に答える 2

9

年:

これはどう?

getSession().createCriteria(AutomaticShift.class).list()

編集:

これでうまくいくはずです。

getSession().createCriteria(Car.class).createAlias("gearShift", "gs").add(Restrictions.eq("gs.class", AutomaticShift.class)).list();
于 2012-05-22T13:48:17.650 に答える
0

オーバーヘッドのように聞こえるかもしれませんが、2つのステップで実行できます。

  1. 自動ギアのすべてのIDを取得します。

    List<Long> automaticGearIds = getSession().createCriteria(AutomaticShift.class)
                                            .setProjection(Projections.distinct(Property.forName("id")))
                                            .list();
    
  2. オートマチックギアを搭載したすべての車を入手してください。

    return getSession().createCriteria(Car.class).add(Restrictions.in("gearShift.id", automaticGearIds)).list();
    
于 2012-05-22T14:11:24.450 に答える