我设置了使用 WHERE IN 查询数据库的方法,但查询的执行与我的预期相反。
CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
CriteriaQuery<ActivityLog> c = qb.createQuery(ActivityLog.class);
Root<ActivityLog> p = c.from( ActivityLog.class );
Predicate condition1 = qb.equal( p.get(ActivityLog_.div), div);
Collection<String> viewStatus = new ArrayList<String>();
viewStatus.add("C");
viewStatus.add("U");
viewStatus.add("D");
Predicate condition2 = qb.equal(p.get(ActivityLog_.status), p.get(ActivityLog_.status).in(viewStatus));
c.where( qb.and(condition1, condition2) );
c.orderBy( qb.desc( p.get( ActivityLog_.update_time.getName() ) ) );
TypedQuery<ActivityLog> q = getEntityManager().createQuery(c);
q.setMaxResults(15);
return q.getResultList();
结果实际上是相反的——我得到的状态不是 C、U、D。如果我更改 Predicate condition2 行——我会得到我期望的结果??
Predicate condition2 = qb.notEqual(p.get(ActivityLog_.status), p.get(ActivityLog_.status).in(viewStatus));
MySQL 驱动程序或 Eclipselink 是否存在错误?还是我的想法有缺陷?
我希望从 divsion = div 和 status IN (C,U,D) 的 ActivtyLog 中检索