【发布时间】:2015-03-05 17:38:04
【问题描述】:
有一种方法可以像这样创建 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 + "%");
}
如果查询需要有可选的搜索字段(if null != search),有 2 个检查
避免重复的最常见方法是什么?
使用单个参数可能有 2 个命名查询,或者 Criteria API 可能允许避免这种情况(因为没有查询字符串),但是还有其他方法吗?
【问题讨论】:
-
使用 QueryDSL!这是解决这种“代码气味”和许多其他问题的解决方案。看:querydsl.com
-
这是一个新的lib,以前没听说过,一定会看的。