在这个例子中,我有一个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
框架进行简单查找的首选/正确方法吗?是否有任何可以减少的,或者我错过的其他方法/建设者类可能会使这种错综复杂?