Фильтр гибернации в списке объектов, но извлекающий только один из атрибутов - PullRequest
3 голосов
/ 21 октября 2010

Если у меня есть объект с именем Foo, который выглядит примерно так:

@Entity
public final class Foo {
    private int id;
    private String name;
    ...
}

Я хочу получить имена объектов Foo с идентификатором больше 10. Если у меня уже есть коллекцияобъектов Foo, я мог бы сделать что-то вроде этого:

List<Foo> foos = ...
Query filter = session.createFilter(foos, "where id > :id");
filter.setInteger("id", 10);
List filteredFoos = filter.list();

Есть ли способ создать вышеупомянутый фильтр так, чтобы я получал список строк (то есть имен Foo) вместо списка Fooкоторый я должен был бы отфильтровать вручную так:

for (Foo foo : filteredFoos) {
    String name = foo.getName();
    ...
}

Ответы [ 2 ]

1 голос
/ 21 октября 2010
List filteredFoos = session.createFilter(foos, "where id > :id")
                           .setInteger("id", 10).list();
List filteredFooNames = session.createFilter(filteredFoos, "select name").list();

Или попробуйте это.Я не уверен, что это сработает, но первый точно сработает.

List filteredFooNames = session.createFilter(foos, "select name where id > :id")
                           .setInteger("id", 10).list();
0 голосов
/ 24 августа 2017

Вы используете короткий код для фильтра в спящем режиме, как этот;

List<Foo> foos = ....;
Integer id = 10;
List filterList = session.createFilter(foos, "where id>: id").setInteger("id",id).list();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...