2016-08-19 2 views
0

Ich habe folgende Spring Data JPA-Repository:Spring Data JPA und starts Repository

@RepositoryRestResource(collectionResourceRel = "product", path = "product") 
public interface ProductRepository extends PagingAndSortingRepository<Product, Integer> { 

    @RestResource(path = "nameStartsWith", rel = "nameStartsWith") 
    Page findByNameStartsWithOrderByNameDesc(@Param("name") String name, Pageable p); 


} 

Die Definition der Produktklasse liegt auf der Hand und ist ein zugeordnetes JPA-Entität auf einer PostgreSQL-Datenbank.

Es funktioniert ziemlich gut, aber es hat ein lästiges Problem, das ich nicht beheben konnte.

Ich vermute, dass Frühling diese Methodendefinition in einer SQL-Abfrage mit dem gleichen Operator übersetzen, der _ und % als Joker verwendet. Ich fürchte jedenfalls, dass diese Zeichen nicht maskiert werden, wenn sie an diese Methode übergeben werden, mit dem Ergebnis, dass wenn ich nach einem Produkt mit einem Namen suche, der eine _ enthält, wird es als "irgendein Zeichen" verstanden, und das ist schlecht wegen der Namenskonvention, die meine Produkte verwenden.

Ich brauche einen Weg, um den Name-Parameter zu entkommen, bevor es an die Methode übergeben wird, aber die einzige Möglichkeit, die ich mir vorstellen konnte, ist die Implementierung der Methode selbst verlieren die Magie der Feder-Daten. Gibt es einen eleganteren Weg, dies zu tun?

Vielen Dank!

PS Ich bin mit Federverschluß 1.4.0

+0

Haben Sie ein Problem festgestellt? –

+0

Ich würde zuerst überprüfen, dass Spring nicht bereits die Zeichen% und _ entkommt und die richtige SQL-Abfrage erzeugt, anstatt nur davon auszugehen. Du hast vielleicht Recht, aber vielleicht kümmert es sich schon darum. Schalten Sie die SQL-Anmeldung ein und sehen Sie, was produziert wird. –

+0

Hallo JB, das Verhalten der Methode ist offensichtlich, da es Produkte mit einem beliebigen Zeichen anstelle von _ zurückgibt, so oder es ist nicht entkommen oder es gibt größere Bug irgendwo im Frühjahr Daten. Jedenfalls, wenn ich nur die Ruhezustands-Logs anschaue, bestätige ich, was ich gesagt habe: Die generierte Abfrage verwendet den like-Operator und der Parameter ist der in der Eingabe angegebene, der nicht maskiert ist. –

Antwort

Verwandte Themen