Thật kỳ lạ nhưng truy vấn không xử lý null rất tốt. Khi tôi thay đổi truy vấn thành:
Query query = getSession().createQuery("from Car as c where " +
"c.carModel = ? AND c.carMake is null").setParameter(0, carModel);
nó hoạt động tốt vì DAO cần truy vấn make là NULL. Vì vậy, nếu nó không phải là null, tôi cần có hai bộ truy vấn, một bộ được mã hóa cứng để chọn null như trên, bộ còn lại là setParam (1, carMake).
Kỳ lạ nhưng tôi nghĩ điều này hiệu quả.