我有一个 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 中使用字符串的包含方法?
最佳答案
您的问题与 JPA 或 lambda 无关,但与 jinq 有关:它根本不支持将 String.contains()
转换为数据库查询。参见 http://www.jinq.org/docs/queries.html#N65890对于支持的内容。
关于java - Java 中的 Lambda - 无法分析 lambda 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31333555/