0

使用Apache Cayenne我试图弄清楚当我有一个属性值集合时如何避免对数据库进行迭代调用。

假设我们有一个具有String类型Person属性的持久对象。如果我有一个包含名称的列表,我想生成一个允许单个数据库调用的表达式,而不是遍历列表并依次获取每个。namePersonPerson

这实际上并不存在,但我想要这样的东西:

List<String> names = ...;
ExpressionFactory.orLikeExp(Person.NAME_PROPERTY, names);
4

1 回答 1

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);
于 2014-11-10T11:39:01.170 回答