【发布时间】:2016-07-15 18:44:57
【问题描述】:
我正在 WebLogic 服务器 10.3.6 上使用 Java 1.6、Jsf 2.0、JPA 2.0、Primefaces 5.3 制作应用程序
我需要为某些模块实现惰性数据表负担,但我无法使过滤器工作。
这是加载方法:
public List<T> load(int first, int pageSize, String sortField,
SortOrder sortOrder, Map<String, Object> filters) {
// TODO Auto-generated method stub
try {
List<T> list = new ArrayList<T>();
//Criteria Query
CriteriaBuilder cb = this.ejbUtils.getEntityManagerPrivate().getCriteriaBuilder();
CriteriaQuery<T> cq = cb.createQuery(entityClass);
//From
Root<T> from = cq.from(entityClass);
//Sort
if(sortField != null){
if(sortOrder == SortOrder.ASCENDING){
cq.orderBy(cb.asc(from.get(sortField)));
}else{
cq.orderBy(cb.desc(from.get(sortField)));
}
}
//Filters
if(!filters.isEmpty()){
List<Predicate> predicates = new ArrayList<Predicate>();
for (Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
String filterProperty = it.next();
Object filterValue = filters.get(filterProperty);
Expression<String> literal = cb.upper(cb.literal((String)filterProperty.toUpperCase()));
predicates.add(cb.like(literal, String.valueOf("%" + filterValue + "%").toUpperCase()));
}
cq.where(predicates.toArray(new Predicate[predicates.size()]));
}
Query q = this.ejbUtils.getEntityManagerPrivate().createQuery(cq);
list = q
.setFirstResult(first)
.setMaxResults(pageSize)
.getResultList();
this.setRowCount(this.ejbUtils.count());
return list;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
然后我查看了 EclipseLink 日志并把这个扔给我
[EL Fine]: 2016-07-15 11:15:35.415--ServerSession(1294563329)--Connection(1645363733)--Thread(Thread[[ACTIVE] ExecuteThread: '21' for queue: 'weblogic. kernel.Default (self-tuning)',5,Pooled Threads])--SELECT * FROM (SELECT /*+ FIRST_ROWS / a., ROWNUM rnum FROM (SELECT ID AS a1, ACTION AS a2, ACTIVA AS a3, FECHA_CREACION AS a4, FECHA_MODIFICACION AS a5, NOMBRE AS a6, USUARIO_CREACION AS a7, USUARIO_MODIFICACION AS a8, ID_PADRE AS a9 FROM SE_OPCIONES WHERE UPPER(?) LIKE ?) WHERE ROWNUM ?绑定 => [NOMBRE, %ROL%, 10, 0]
然后,当我在数据表中输入过滤器时,永远不会带来结果。
【问题讨论】:
-
几件事:我没有看到错误,并且查询是否从带有主(或单元测试)的普通 java 类中工作
标签: jpa