我需要执行表格
的查询SELECT dontcare FROM Bar b WHERE x = y AND expr
不安全的方法是
String qStr = "SELECT foo FROM Bar b WHERE " + x " = " + y " AND " + expr
然而,x和y不是受信任的来源,所以留下注射攻击。我找到了CriteriaBuilder,并对“x = y”部分进行了程序化构建,工作正常,但无法找到如何附加“AND expr”。
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaBuilder<Bar> q = cb.createQuery(Foo.class);
Root<Bar> root = q.from(Bar.class);
Predicate p1 = cb.equals(root.get(x), y);
Predicate p2 = <====== help needed here, how can I use expr
q.where(cb.and(p1, p2));
Query query = em.createQuery(q);
有什么想法吗?我花了很多时间查看教程和表达式,谓词,查询等的javadoc。
答案 0 :(得分:1)
使用条件api,您可以创建连词,其中包含许多必须为真的谓词。
如果你想要OR,你可以使用析取。
类似的东西:
Criteria crit = session.createCriteria(Product.class);
Conjunction conjunction = Restrictions.conjunction();
conjunction.add(Restrictions.isNull("location"));
conjunction.add(Restrictions.eq("location", ""));
crit.add(conjunction);