Abfrage ohne Berücksichtigung der Groß- und Kleinschreibung mit Spring CrudRepository


102

Mit Spring CrudRepository Query; Ich möchte "DeviceType" -Entitäten mit der Eigenschaft "name" auswählen. Bei der folgenden Abfrage wählen Sie die Berechtigungen nach Groß- und Kleinschreibung aus. Wie ich es fallunabhängig mache. Vielen Dank.

public interface DeviceTypeRepository extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType> {

    public Iterable<DeviceType> findByNameContaining(String name);

}  

16
Hast du es versucht public Iterable<DeviceType> findByNameIgnoreCaseContaining(String name);?
Peter Keller

Wenn Sie an Query interessiert sind, versuchen Sie dies bitte. Nach LIKE <code> @Query (value = "Wählen Sie dt aus DeviceType als dt aus, wobei lower (dt.name) wie lower (: name)". ) public Iterable <DeviceType> anyMethodNameGoesHere (@Param (name) String name); </ code>
Java_Fire_Within

Antworten:


197

Genau wie @Peter im Kommentar erwähnt, fügen Sie einfach hinzu IgnoreCase:

public interface DeviceTypeRepository 
    extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType> {

    public Iterable<DeviceType> findByNameContainingIgnoreCase(String name);
}  

In der Dokumentation finden Sie eine Liste aller unterstützten Schlüsselwörter in Methodennamen.


Vielen Dank für die Antwort; Ich werde diese Dokumentation sicher weiterleiten. Mai Danke. Eine gute Zeit haben !
Channa

3
Es hat bei mir funktioniert. Ich habe eine JPA-Abfrage verwendet. Also gemäß der Dokumentation, wo UPPER (x.firstame) = UPPER (? 1) funktionierte.
Sunitha

@sunitha wissen Sie, wie wir dieses Verhalten ändern können, sagen wir, dass es NIEDRIGER ist? Meine Datenbank hat Indexierung basierend auf Kleinbuchstaben
Sudip Bhandari

@ SudipBhandari: Sicher kannst du.
Sunitha

1
Für mehrere Eigenschaften IgnoreCasewie folgt wiederholen :List<Account> findByUsernameIgnoreCaseAndDomainIgnoreCase(String username, String domain);
Tarator

11

Die folgende Spring Data Mongo-Abfrage funktioniert für mich. Ich würde es vorziehen, Listanstatt zu verwendenIterator

public interface DeviceTypeRepository extends CrudRepository<DeviceType,Integer>, JpaSpecificationExecutor<DeviceType> {
    List<DeviceType> findByNameIgnoreCase(String name);
} 

1

In meinem Fall hat das Hinzufügen IgnoreCaseüberhaupt nicht funktioniert.

Ich habe festgestellt, dass es auch möglich ist, Optionen für den regulären Ausdruck bereitzustellen:

@Query(value = "{'title': {$regex : ?0, $options: 'i'}}")
Foo findByTitleRegex(String regexString);

Die iOption macht die Abfrage unabhängig von Groß- und Kleinschreibung.


1

Für diejenigen, die eine benutzerdefinierte JPA-Abfrage verwenden. Das obere Schlüsselwort und toUpperCase helfen. Der folgende Code funktioniert für mich

 return  entityManager.createQuery("select q from "table " q  where upper(q.applicant)=:applicant")
    .setParameter("applicant",applicant.toUpperCase().trim()).getSingleResult();

1
Seien Sie vorsichtig, wenn Sie 'Upper (q.applicant)' verwenden. In Postgres verursacht es '.PSQLException: ERROR: Funktion Upper (Bytea) existiert nicht', wenn q.applicant null ist
advortsov
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.