Странно е, но заявката не обработва null много добре. Когато промених заявката на:
Query query = getSession().createQuery("from Car as c where " +
"c.carModel = ? AND c.carMake is null").setParameter(0, carModel);
работи добре, тъй като DAO трябва да направи заявка за make като NULL. Така че, ако не е null, трябва да имам два набора от заявки, единият да е твърдо кодиран да избира null както по-горе, а другият да setParam(1, carMake).
Странно, но мисля, че това работи.