Лямбда в Java - не удалось проанализировать лямбда-код

У меня есть приложение с Hibernate (JPA), которое я использую в сочетании с Jinq. У меня есть таблица, в которой перечислены сущности, и я хочу, чтобы пользователь мог ее фильтровать. В таблице перечислены лица.

@Entity
public class Person {
    private String firstName;
    private String surName;
    @Id
    private int id;
    public Person() {
    }
    public Person(final String pFirstName, final String pSurName, final int pID) {
        firstName = pFirstName;
        surName = pSurName;
        id = pID;
    }
    public int getId() {
        return id;
    }
    public void setId(final int pID) {
        id = pID;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(final String pFirstName) {
        return firstName = pFirstName;
    }
    public String getSurName() {
        return surName;
    }
    public void setSurName(final String pSurName) {
        surName = pSurName;
    }
}

Я использую JavaFX для этого, но это не имеет значения. Первое, что я пробовал, - это отфильтровать людей по их фамилии. Для фильтрации я использовал Jinq в комбинации с лямбдой. Мой код фильтрации выглядит следующим образом:

private List<Person> getFilteredPersons(final String pSurName){
    JPAJinqStream<Person> stream = streamProvider.streamAll(Person.class);
    stream.where(person -> person.getSurName().contains(pSurName));
    List<Person> filteredList = stream.toList();
    stream.close();
    return filteredList;
}

Итак, объект, над которым я работаю, является обычной строкой. Я не думаю, что мой класс Person имеет к этому какое-то отношение. Моя первая мысль заключалась в том, что вы не можете использовать метод boolean contains(...) в лямбда, потому что, когда возникла ошибка, он сказал:

Caused by: java.lang.IllegalArgumentException: Could not analyze lambda code

Итак, мой вопрос: возможно ли каким-либо образом использовать метод contains в String в lambdacode?

Ответ 1

Ваш вопрос не имеет ничего общего с JPA или lambdas, но все, что связано с jinq: он просто не поддерживает перевод String.contains() в запрос базы данных. См. http://www.jinq.org/docs/queries.html#N65890 для поддерживаемого.