如何使用EntityManager和JPA减少CriteriaQuery的详细程度

时间:2016-04-29 12:53:53

标签: java jpa

在这个例子中,我有一个Recipe对象的列表,这些对象持久存储到我的数据库中,其中每个配方都有一个name类型String的属性。

我有RecipeManager提供方法Recipe lookupByName(String name)

我已经阅读了一些教程以及CriteriaBuilder课程的文档,并且我已经达成了解决方案,但它似乎非常冗长:

    private static CriteriaQuery<Recipe> getNameQuery(EntityManager em) {
        CriteriaBuilder builder = em.getCriteriaBuilder();
        CriteriaQuery<Recipe> query = builder.createQuery(Recipe.class);
        Root<Recipe> r = query.from(Recipe.class);
        ParameterExpression<String> nameParam = builder.parameter(String.class, "name");
        query.where(builder.equal(r.get("name"), nameParam));
        query.select(r);

        return query;
    }

    public Recipe lookupByName(String recipeName) {
        try {
            CriteriaQuery<Recipe> nameQuery = getNameQuery(this.em);
            return this.em.createQuery(nameQuery).setParameter("name", recipeName).getSingleResult();
        } catch (NoResultException ex) {
            return null;
        }
    }

这是使用JPA中的EntityManager框架进行简单查找的首选/正确方法吗?是否有任何可以减少的,或者我错过的其他方法/建设者类可能会使这种错综复杂?

0 个答案:

没有答案