我遇到了hibernate条件查询的问题。我有:
DetachedCriteria carCriteria = DetachedCriteria.forClass(Car.class);
List<Car> cars = getHibernateTemplate().findByCriteria(carCriteria);
for(Car car : cars) {
System.out.println("class type " + car.getClass());
}
上面打印了类型model.FourByFour,其中FourByFour扩展了Car。正如我在DetachedCriteria中指定了Car类,我期望类类型是Car而不是FourByFour。
映射(简化):
<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>
如何使从条件查询返回的对象成为Car对象而不是FourByFour对象?
答案 0 :(得分:0)
你要求购买汽车,由于FourByFour扩展了Car,因此FourByFour 是汽车,因此查询还返回了FourByFour实例。 Hibernate查询是多态的。就像你去汽车商店并向他们展示所有汽车一样,即使他们是SUV,Monospaces或混合动力汽车。
要限制到特定的类实例,您必须添加其他标准:
carCriteria.add(Restrictions.eq("class", Car.class));