使用Apache Cayenne当我有一个属性值集合时,我试图弄清楚如何避免对数据库进行迭代调用。
假设我们有一个持久对象Person
,其属性name
的类型为字符串。如果我有一个包含Person
名称的列表,我想生成一个允许单个数据库调用的表达式,而不是遍历列表并依次获取每个Person
这实际上并不存在,但我希望这样:
List<String> names = ...;
ExpressionFactory.orLikeExp(Person.NAME_PROPERTY, names);
答案 0 :(得分:2)
您可以使用ExpressionFactory.join(..):
List<Expression> pairs = new ArrayList<>(names.size());
for(String name : names) {
// use an expression appropriate for comparison...
// "like" in this example, but can be "equals", etc.
pairs.add(ExpressionFactory.likeExp(Person.NAME_PROPERTY, name));
}
Expression e = ExpressionFactory.joinExp(Expression.OR, pairs);