我有一个与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与lambda结合使用。我的过滤代码如下所示:
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;
}

因此,我要操作的对象是普通的String。我认为我的Person类与此无关。我的第一个想法是,您不能在lambda中使用boolean contains(...)方法,因为当错误出现时,它说:
Caused by: java.lang.IllegalArgumentException: Could not analyze lambda code

所以我的问题是,是否可以在lambdacode中使用String的contains方法?

最佳答案

您的问题与JPA或lambdas无关,但与jinq有关:它根本不支持将String.contains()转换为数据库查询。有关支持的内容,请参见http://www.jinq.org/docs/queries.html#N65890

关于java - Java中的Lambda-无法分析Lambda代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31333555/

10-11 08:42