Apache Cayenne Получить коллекционное выражение

Используя Apache Cayenne, я пытаюсь понять, как избежать итеративных обращений к БД, когда у меня есть коллекция значений атрибутов.

Скажем, у нас есть постоянный объект Person с атрибутом name типа Строка. Если у меня есть список, содержащий имена Person Я хотел бы создать выражение, которое позволяет один вызов БД, а не перебирать список и получать каждый Person в очереди.

Это на самом деле не существует, но я хотел бы что-то вроде этого:

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

1 ответ

Решение

Вы можете использовать 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);
Другие вопросы по тегам