2015-07-10 20 views
10

Tôi đã có một ứng dụng với Hibernate (JPA) mà tôi đang sử dụng kết hợp với Jinq. Tôi có một bảng liệt kê các thực thể và tôi muốn người dùng có thể lọc nó. Trong bảng có những người được liệt kê.Lambda trong Java - Không thể phân tích mã lambda

@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; 
    } 
} 

Tôi đang sử dụng JavaFX cho việc này, nhưng điều này không quan trọng. Điều đầu tiên tôi cố gắng là lọc họ bằng tên họ của họ. Để lọc, tôi đã sử dụng Jinq kết hợp với lambda. Mã lọc của tôi trông giống như sau:

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

Vì vậy, đối tượng tôi đang hoạt động là một chuỗi bình thường. Tôi không nghĩ rằng lớp học của tôi có liên quan đến điều đó. Suy nghĩ đầu tiên của tôi là, rằng bạn không thể sử dụng phương pháp boolean contains(...) trong lambda vì khi lỗi xuất hiện, nó nói:

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

Vì vậy, câu hỏi của tôi là, nó là bằng cách nào đó có thể sử dụng chứa-method của một Chuỗi trong lambdacode?

Trả lời

7

Câu hỏi của bạn không liên quan gì đến JPA hoặc lambdas, nhưng mọi thứ liên quan đến jinq: nó không hỗ trợ dịch String.contains() sang truy vấn cơ sở dữ liệu. Xem http://www.jinq.org/docs/queries.html#N65890 để biết những gì được hỗ trợ.

+0

Cảm ơn, điều đó đã làm cho tôi :) có bạn có ý tưởng làm thế nào tôi có thể nhận ra nó sau đó nhưng vẫn sử dụng jinq? – Basti

+0

Nếu bạn tiếp tục đọc tài liệu, nó nói về jpql.like –

Các vấn đề liên quan