Ich habe meine ContactDao wie folgt definiert:Ist es möglich, den @Query-Parametern Platzhalter hinzuzufügen?
public interface ContactDao extends JpaRepository<Contact, Long> {
/**
* Finds all contacts that the given user has entered where the contact's full name matches {@code name}.
* @param userId The current user's LDAP id.
* @param name The name to search for.
* @return A list of contacts matching the specified criteria.
*/
@Query(" select c from Form as f" +
" inner join f.contacts as c" +
" where f.requestorUserId = :userId" +
" and lower(c.fullName) like lower(:name)" +
" order by lower(c.fullName)")
List<Contact> findUserContactsByUserIdAndName(@Param("userId") String userId, @Param("name") String name);
}
Die oben funktioniert perfekt, und die SQL erzeugt ist, was ich selbst schreiben würde. Das Problem ist, dass ich dem Parameter :name
Umgebungs-Joker hinzufügen möchte. Gibt es einen schönen Weg, dies zu tun? Ich habe mir das Spring Data JPA-Referenzdokument angesehen und kann nichts über Wildtiere und @query
finden.
den folgenden Hack funktioniert, aber ist ein bisschen hässlich:
and lower(c.fullName) like '%' || lower(:name) || '%'
Hat jemand eine bessere Lösung?
Danke, Muel.
Ein etwas off-topic Randnotiz im Falle irgendwelche _Spring Daten_ Autoren sind über .. :) Vielleicht ist diese Art von Funktion (mit Wildcards begrenzt) hinzugefügt werden könnten, um '@ Param'; zB '@Param (Wert =" Name ", WildcardStategy = WildcardStrategy.BOTH)'. Zugegeben, ich habe mir diesen sehr kleinen Gedanken gemacht, also gibt es wahrscheinlich starke Argumente dagegen! – Muel
Ist das wirklich ein Hack? –