我将从一个消毒的例子开始。
在我的系统中,我有班级汽车。 Car有许多领域,其中包括GearShift类的gearShift实例。
public class Car {
private GearShift gearShift;
// Snip
}
GearShift是一个抽象类,AutomaticShift和StickShift从中继承。这在Hibernate中映射为table-per-subclass。
现在,我想要让自动换档的汽车。我更喜欢通过Hibernate标准来做这件事,所以我想象一下我可以添加的“ofType”限制,如下所示。
getSession().createCriteria(Car.class)
.add(Restrictions.ofType(AutomaticShift.class)
.list();
这有可能吗?
答案 0 :(得分:9)
OLD:
这个怎么样?
getSession().createCriteria(AutomaticShift.class).list()
修改强>
这应该可以解决问题;
getSession().createCriteria(Car.class).createAlias("gearShift", "gs").add(Restrictions.eq("gs.class", AutomaticShift.class)).list();
答案 1 :(得分:0)
也许这听起来有点像开销,但你可以分两步完成:
检索自动齿轮的所有ID:
List<Long> automaticGearIds = getSession().createCriteria(AutomaticShift.class)
.setProjection(Projections.distinct(Property.forName("id")))
.list();
让所有汽车都配备自动档位:
return getSession().createCriteria(Car.class).add(Restrictions.in("gearShift.id", automaticGearIds)).list();