hibernate - Hibernate NOT IN 空列表评估为 false
问题描述
我有以下休眠查询:
public long countHouseBoats(HouseBoat houseBoat, Type type, List<Long> excludedIds) {
TypedQuery<Long> query = entityManager.createQuery("SELECT COUNT(o) FROM AquaticCity o " +
"WHERE o.houseBoat = :houseBoat " +
"AND o.chimneyType = :chimneyType " +
"AND o.keel.manufacturer.id NOT IN (:excludedIds) " +
"AND o.type.name IN (:types)", Long.class);
query.setParameter("houseBoat", houseBoat);
query.setParameter("chimneyType", ChimneyType.REGULAR);
query.setParameter("excludedIds", excludedIds);
query.setParameter("types", toStringList(List.of(type)));
return query.getSingleResult();
}
如果excludedIds
不为空,它会按我的预期工作。如果它是空的,那么就好像NOT IN <emptyList>
评估为,而不是像人们期望的那样false
总是评估为。true
我不知道为什么会发生这种情况。我已经阅读并存在一些类似的问题,但它们并不完全相同。
我将求助于检查列表是否为空的明显丑陋的解决方法,如果是,则在不检查的情况下构建查询excludedIds
。