webentwicklung-frage-antwort-db.com.de

JPQL Wie Groß- und Kleinschreibung wird nicht berücksichtigt

Ich möchte Daten in der Benutzertabelle nach Namen ohne Berücksichtigung der Groß- und Kleinschreibung durchsuchen.

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

  @Query("select u from User u where lower(u.name) like %lower(?1)%")
  public List<User> findByNameFree(String name);

}

Ich habe einen Fehler erhalten: unerwartetes Token:% . Wo soll ich '%' platzieren?

12
windupurnomo

Sie können den concat-Operator verwenden:

@Query("select u from User u where lower(u.name) like lower(concat('%', ?1,'%'))")
public List<User> findByNameFree(String name);

oder mit einem benannten Parameter:

@Query("select u from User u where lower(u.name) like lower(concat('%', :nameToFind,'%'))")
public List<User> findByNameFree(@Param("nameToFind") String name);

(Getestet mit Spring Boot 1.4.3)

38
Wim Deblauwe

Wenn dies nur das ist, was Sie möchten und Sie Spring Data JPA verwenden, müssen Sie keine Abfrage schreiben. 

List<User> findByNameContainingIgnoreCase(String name);

Andernfalls müssen Sie das name-Attribut mit % umschließen, bevor Sie es an die Methode übergeben. Oder verwenden Sie keine Abfrage, sondern verwenden Sie eine Spezifikation oder die Kriterien-API, um die Abfrage zu erstellen. 

11
M. Deinum

Sie können wildcard matching verwenden.

zum Beispiel möchte ich den Namen wie haha suchen,

@Query("select u from User u where lower(u.name) like :u_name")
public List<User> findByNameFree(@Param("u_name") String name);
List<User> users = userDao.findByNameFree("%haha");
0
Nicholas