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

OLD:

How about this?

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

EDIT:

This should do the trick;

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

也许这听起来有点像开销,但你可以分两步完成:

  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 回答