1

休止状態の条件クエリに問題があります。私は持っている:

DetachedCriteria carCriteria = DetachedCriteria.forClass(Car.class);
List<Car> cars = getHibernateTemplate().findByCriteria(carCriteria);

for(Car car : cars) {
System.out.println("class type " + car.getClass());
}

上記は、FourByFour が Car を拡張するクラス型 model.FourByFour を出力します。DetachedCriteria で Car クラスを指定したので、クラス タイプは FourByFour ではなく Car であると予想していました。

マッピング (簡略化):

<hibernate-mapping default-access="field" default-lazy="true" package="model">
<class name="model.Vehicle" table="VEHICLE">
<id column="VEHICLE_ID" name="id" type="long">
    <generator class="native" />
</id>

    ...

    <joined-subclass extends="model.Vehicle" name="model.Car" table="CAR">
    <key column="VEHICLE_ID" />
        ....
        <joined-subclass extends="model.Car" name="model.FourByFour" table="FOUR_BY_FOUR">
    <key column="VEHICLE_ID" />
    </joined-subclass>
</joined-subclass>
</class>

条件クエリから返されるオブジェクトを、FourByFour オブジェクトではなく Car オブジェクトにするにはどうすればよいですか?

4

1 に答える 1

0

車を要求すると、FourByFour は Car を拡張するため、FourByFourCar であるため、クエリは FourByFour インスタンスも返しました。Hibernate クエリは多態的です。自動車販売店に行くと、SUV、モノスペース、ハイブリッド車など、すべての車が表示されます。

特定のクラス インスタンスに制限するには、追加の基準を追加する必要があります。

carCriteria.add(Restrictions.eq("class", Car.class));
于 2012-10-16T20:52:32.670 に答える