如何在JPA中查询哪个值为null的列?

时间:2011-06-12 22:45:27

标签: java jpa

我正在使用JPA namedQuery从DB中选择数据。

 @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,但我确信它应该有记录。原因是refTable。如何在JPA中查询哪个值为null的列?

感谢。

4 个答案:

答案 0 :(得分:29)

只需将您的查询更改为

即可
 @NamedQuery(name = "Concept.findByRefTableNull", query = "SELECT c FROM Concept c WHERE c.conceptName = :conceptName and c.refTable IS NULL"),

答案 1 :(得分:1)

我不确定这是否只是Spring Data JPA功能,但我只是在findByFieldName(Type字段)格式的存储库接口中编写一个方法,其中fieldName是我需要执行的列的名称空检查。然后我使用此方法并将null作为参数传递。

答案 2 :(得分:0)

您可以像这样使用Criteri Api:

private Specification<Object> nullData(String field) {
    return (root, query, cb) ->
            cb.isNull(cb.lower(root.get(field)));
}

答案 3 :(得分:-1)

我会完全避免查询 - 它几乎否定了持久性抽象的意义。通过Criteria API创建动态查询,这将确保可移植性并且您将能够在一定程度上切换数据库而不会有太多麻烦