Как запросить столбец, значение которого является нулевым в 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, это обеспечит мобильность, и вы сможете переключать базы данных в некоторой степени без особых хлопот

Другие вопросы по тегам