Как запросить столбец, значение которого является нулевым в JPA?
Я использую JPA namedQuery для выбора данных из БД.
@NamedQuery(name = "Concept.findByRefTableNull", query = "SELECT c FROM Concept c WHERE c.conceptName = :conceptName and c.refTable = :refTable"),
///
List<Concept> attributeList
= em.createNamedQuery("Concept.findByRefTableNull")
.setParameter("conceptName", "student").
setParameter("refTable", null).
getResultList();
System.out.println(attributeList.size()); //return 0
Размер списка равен 0, но я уверен, что в нем должны быть записи. Причина в возврате. Как запросить столбец, значение которого является нулевым в JPA?
Благодарю.
3 ответа
Просто измените ваш запрос на
@NamedQuery(name = "Concept.findByRefTableNull", query = "SELECT c FROM Concept c WHERE c.conceptName = :conceptName and c.refTable IS NULL"),
Вы можете использовать Criteri Api, например так:
private Specification<Object> nullData(String field) {
return (root, query, cb) ->
cb.isNull(cb.lower(root.get(field)));
}
Я не уверен, что это только функция Spring Data JPA, но я просто пишу метод в интерфейсе репозитория в форме findByFieldName(Type field), где fieldName - это имя столбца, для которого нужно выполнить проверку на нулевое значение. Затем я использую этот метод и передаю ноль в качестве параметра.
Я бы вообще избегал запросов - это в значительной степени сводит на нет чувство настойчивости-абстракции. Вместо этого создавайте динамические запросы через Criteria API, это обеспечит мобильность, и вы сможете переключать базы данных в некоторой степени без особых хлопот