2015-07-10 6 views
10

Ich habe eine Anwendung mit Hibernate (JPA), die ich in Kombination mit Jinq verwende. Ich habe eine Tabelle, die Entitäten auflistet und möchte, dass der Benutzer sie filtern kann. In der Tabelle sind Personen aufgeführt.Lambda in Java - konnte den Lambda-Code nicht analysieren

Ich benutze JavaFX für diese, aber das sollte keine Rolle spielen. Als erstes habe ich versucht, die Personen nach ihrem Nachnamen zu filtern. Zum Filtern verwendete ich Jinq in Kombination mit Lambda. Mein Filtercode sieht so aus:

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

Also das Objekt, auf dem ich arbeite, ist ein normaler String. Ich glaube nicht, dass meine Person-Klasse etwas damit zu tun hat. Mein erster Gedanke war, dass man nicht die Methode boolean contains(...) in Lambda verwenden kann, weil, wenn die Fehler auftauchten, er sagte:

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

Also meine Frage ist, ist es irgendwie möglich, die enthält-Verfahren zur Herstellung eines zu verwenden, Zeichenfolge in Lambdacode?

Antwort

7

Ihre Frage hat nichts mit JPA oder Lambdas zu tun, aber alles mit jinq zu tun: Es unterstützt einfach nicht die Übersetzung String.contains() in eine Datenbankabfrage. Informationen dazu, was unterstützt wird, finden Sie unter http://www.jinq.org/docs/queries.html#N65890.

+0

Danke, das hat es für mich getan :) hast du eine Idee wie ich es dann realisieren könnte aber immernoch jinq benutze? – Basti

+0

Wenn Sie das Dokument weiterhin lesen, spricht es über jpql.like –

Verwandte Themen