条件查询使用特定子类查找行



我将从一个经过净化的示例开始。

在我的系统中,我有类汽车。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();

这有可能吗?

OLD:

怎么样?

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

编辑:

这应该可以解决问题;

getSession().createCriteria(Car.class).createAlias("gearShift", "gs").add(Restrictions.eq("gs.class", AutomaticShift.class)).list();

也许这听起来有点像开销,但您可以通过 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();
    

最新更新