创建可能包含参数或可能不包含参数的JPA查询的最佳方法

时间:2015-03-05 17:38:05

标签: java hibernate jpa

有像这样创建JPA查询的方法

        String queryString = "SELECT i FROM Item i";

        if (null != search) {
            queryString += " WHERE i.name LIKE :pattern";
        }

        TypedQuery<Item> query = entityManager.createQuery(queryString, Item.class);

        if (null != search) {
            query.setParameter("pattern", "%" + search + "%");
        }

并且有2个检查查询是否需要具有可选搜索字段(if null != search) 什么是最常见的避免重复的方法? 使用单个参数可能有2个命名查询,或者可能Criteria API允许避免(因为没有查询字符串),但还有其他方法吗?

1 个答案:

答案 0 :(得分:4)

如果您不必以编写查询字符串的方式编写查询,则可以使用JPA Criteria API。你可以看到我打电话给的课程&#34; ExampleDao&#34;我用于研究和示例here

然后,您将为其添加一个可选的where子句,请参阅下面的示例:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Item> criteria = cb.createQuery(Item.class);
Root<Item> root = criteria.from(Item.class);
criteria.select(root);

if (null != search) {
    String pattern = "%pattern here%";
    criteria.where(cb.like(root.get("name"), pattern));
}