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);