我设法通过使用CriteriaBuilder.treat()将baseEntity根向下转换为与子类类型相对应的新根来解决此问题,如下所示:
CriteriaBuilder builder = ...;CriteriaQuery<baseEntity> query = ...;Root<baseEntity> root = ...;Root<Entity1> entity1 = builder.treat(root, Entity1.class);Root<Entity2> entity2 = builder.treat(root, Entity2.class);query.select(root).where(builder.and( builder.lessThan(root.get(baseEntity_.someDate), new Date()), builder.greaterThan(root.get(baseEntity_.otherDate), new Date()), builder.isTrue(root.get(baseEntity_.flag)), builder.equal(entity1.get(Entity1_.someProperty), "foo"), builder.equal(entity2.get(Entity2_.otherProperty), "bar")));



