有一个像这样的实体A
public class A
private String a;
private String b;
..
..
..
如何编写JDO查询,选择与关键字==一个OR关键字匹配的所有A对象== b
完整代码看起来像这样:
Query q = pm.newQuery(SELECT FROM A WHERE a == keyword || b == keyword ORDER BY date DESC");
List<A> results = (List<A>)q.execute(keyword);
此代码不会给出任何错误,但不会给出任何结果。删除||部分给出结果。
由于
答案 0 :(得分:2)
您不能在两个不同的字段上执行OR。以下是docs:
的摘录在JDOQL字符串语法中,您可以 用||分隔多个过滤器 (逻辑“或”)和&amp;&amp; (逻辑“和”), 虽然请记住||只可以 在过滤它时使用 分隔所有具有相同的字段 名称。换句话说,||只是合法的 在过滤它的情况下 分离可以组合成一个 single contains()filter:
// legal, all filters separated by || are on the same field
Query query = pm.newQuery(Employee.class,
"(lastName == 'Smith' || lastName == 'Jones')" +
" && firstName == 'Harold'");
// not legal, filters separated by || are on different fields
Query query = pm.newQuery(Employee.class,
"lastName == 'Smith' || firstName == 'Harold'");
解决此问题的一种方法可能是将a和b存储在列表中。如果你有一个名为foo的项目列表,你可以进行foo = keyword的查询,如果foo中的任何项目匹配,你将在结果中得到该对象。你没有多说a和b是什么,所以我不知道这是否适合你:)
<强>更新强>:
public class Example {
String firstName;
String lastName;
List<String> allNames;
public Example(String first, String last){
firstName = first;
lastName = last;
allNames = new ArrayList<String>();
allNames.add(first);
allNames.add(last);
}
}
有了类似的东西,你可以进行查询,其中“allNames =='Smith'|| allNames =='Jones'”。